ES6 对象的扩展

目录 第四章 扩展对象的功能性对象类别对象字面量语法扩展属性初始值的改写对象方法的简写可计算属性名新增方法Object.is()方法Object.assign()方法重复的对象字面量属性自有属性枚举顺序加强对象原型改变对象原型简化原型访问的super引用正式的方法定义函数

第四章 扩展对象的功能性ui

对象类别this

  • 普通(Ordinary)对象:具备JS对象全部默认内部行为。
  • 特异(Exotic)对象:具备某些与默认行为不符的内部行为。
  • 标准(Standard)对象:ES6规范中定义的对象,如Array、Date等。
  • 内建(Built-in)对象:脚本开始执行时,存在于JS执行环境中的对象。

对象字面量语法扩展指针

属性初始值的改写code

当一个对象的属性与本地变量同名时,没必要再写冒号和值,只须要写属性名。对象

function createPerson (name, age) {
  return {name, age};
}

对象方法的简写排序

对象中声明方法,不须要冒号和function关键字。原型链

var person = {
  sayName () {
    console.log('name');
  },
};

可计算属性名字符串

对象属性能够用变量表示。get

var prefix = 'my';
var person = {
  [prefix + 'number']: '123',       // 等同于 mynumber:'123'
};

新增方法

Object.is()方法

修正全等运算符中的两处疑惑点:

  • +0 === -0
  • NaN !== NaN

Object.assign()方法

实现了相似于mixin的方法。

function mixin (source, supplier) {
  Object.keys(supplier).forEach(function (key) {
    source[key] = supplier[key];
  });
  return source;
}

Object.assign()的好处在于,能够复制访问器属性(get和set)。

重复的对象字面量属性

代码不检查重复属性,对于每一组重复属性,都会选取最后一个取值。

自有属性枚举顺序

基本规则是:

  1. 全部数字键按升序排序
  2. 全部字符串键按照它们被加入的对象的顺序排序
  3. 全部Symbol键按照它们被加入对象的顺序排序

加强对象原型

改变对象原型

添加与Object.getPrototypeOf()相对的Object.setPrototypeOf()方法,用于设置目标对象的__proto__(或理解为[[Prototype]])。

简化原型访问的super引用

super引用至关于指向对象原型的指针,实际上也就是Object.getPrototypeOf(this)的返回值。

super.fn()等效于Object.getPrototypeOf(this).fn.call(this)。

super是静态的,老是指向正确的对象,因此不须要担忧运行时的特性。

正式的方法定义

super的全部引用都经过[[HomeObject]]属性来肯定后续的运行过程。第一步是在[[HomeObject]]属性上调用Object.getPrototypeOf()方法来检索原型的引用;而后搜寻原型链,找到同名函数;最后,设置this绑定而且调用相应的方法。

相关文章
相关标签/搜索