持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天
点击查看活动详情
二、举例 ES6 对 Object 类型做的常用升级优化
d. super 关键字。ES6 在 Class 类里新增了类似 this 的关键字 super。同 this 总是指向当前函数
所在的对象不同,super 关键字总是指向当前函数所在对象的原型对象。
2、升级部分:
a. ES6 在 Object 原型上新增了 is()方法,做两个目标对象的相等比较,用来完善'==='方法。
'==='方法中 NaN === NaN //false 其实是不合理的,Object.is 修复了这个小 bug。
(Object.is(NaN, NaN) // true)
b. ES6 在 Object 原型上新增了 assign()方法,用于对象新增属性或者多个对象合并。
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
注意: assign 合并的对象 target 只能合并 source1、source2 中的自身属性,并不会合并source1、source2 中的继承属性,也不会合并不可枚举的属性,且无法正确复制 get 和 set 属性(会直接执行 get/set 函数,取 return 的值)。
c. ES6 在 Object 原型上新增了 getOwnPropertyDescriptors()方法,此方法增强了 ES5 中getOwnPropertyDescriptor()方法,可以获取指定对象所有自身属性的描述对象。结合
defineProperties()方法,可以完美复制对象,包括复制 get 和 set 属性。
d. ES6 在 Object 原型上新增了 getPrototypeOf()和 setPrototypeOf()方法,用来获取或设置当前
对象的 prototype 对象。这个方法存在的意义在于,ES5 中获取设置 prototype 对像是通过proto属性来实现的,然而proto属性并不是 ES 规范中的明文规定的属性,只是浏览器各大产商“私自”加上去的属性,只不过因为适用范围广而被默认使用了,再非浏览器环境中并不一定就可以使用,所以为了稳妥起见,获取或设置当前对象的 prototype 对象时,都应该采用 ES6 新增的标准用法。
e. ES6 在 Object 原型上还新增了 Object.keys(),Object.values(),Object.entries()方法,用来获取对象的所有键、所有值和所有键值对数组。