Understanding ECMASctript6读书笔记

函数部分

  • 函数参数使用默认值
function getValue() {
    retrun 5;
}
// 默认值部分可以是变量
function add(first, second = getvalue()) {
    return first + second;
}
  • 通过剩余参数来实现不具名参数
// 注意: ...keys只能放于最后
// function pick(object, ...keys, last) { // 这种写法不被允许
function pick(object, ...keys) {
    let result = Object.create(null);

    for (let i = 0, len = key.length; i < len; i++) {
        result[keys[i]] = object[keys[i]];
    }
    return result;
}
  • 用Object.is() 替换'==='
console.log(+0 === -0); // true
console.log(Object.is(+0, -0)); // false
// 绝大数情况下, Object.is()和 === 相等的, 仅有少数情况
  • 用Object.assign() 进行 Mixin 操作
let receiver = {};

Object.assign(receiver,
    {
        type: 'js',
        name: 'file.js'
    },
    {
        type: 'css',
        get name() {
            return 'file.js';
        }
    }
);

console.log(receiver.type) // 'css'
console.log(receiver.name) // 'file.js'

//Object.assign()不能复制get访问器
const descriptor = Object.getOwnPropertyDescriptor(receiver, 'name');
console.log(descriptor.get); //undefined
  • ES6增加了修改原型的方法
let person = {
    getGreeting() {
        return "Hello";
    }
}

let dog = {
    getGreeting() {
        return 'Woof';
    }
}

//原型链为person
let friend = Object.create(person);
console.log(friend.getGreeting());    //Hello
console.log(Object.getPrototypeOf(friend) === person); //true

//将圆形链设置为dog
Object.setPrototypeOf(friend, dog);
console.log(friend.getGreeeting());  // woof
console.log(Object.getPrototypeOf(friend) === dog) // true
  • 使用super对原型链进行更为简便的访问(必须简写)
let friend = {
    getGreeting() { // getGreeting: function() { // 错误
        // 等同于Object.getPrototypeOf(this).getGreeting.call(this)
        return super.getGreeting() + ',hi!';
    }
};

可以使用super调用任何原型上的方法; 而且当使用多级继承, super就能体现强大, es5中使用getPrototypeOf()多级继承非常麻烦, es6的super解决这一问题.

借助Object.setPrototyOf()

  • 重新定义"方法"

在ES6之前, "方法"这个概念从未被正式定义, 它此前仅指对象的函数属性而非数据属性. ES6则正式将方法定义为: 一个拥有[[HomeObject]] 内部属性函数, 此内部属性指向该方法所属对象.

let person = {

    // 方法
    getGreeting() {
        return "Hello";
    }
};

// 并非方法
function shareGreeting() {
    return "Hi!";
}
  • TODO

2 Comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注