Page 235 - 你不知道的JavaScript(下卷)
P. 235
Object.assign( target, o1, o2, o3 );
target.a; // 1
target.b; // 2
target.c; // 3
Object.getOwnPropertyDescriptor( target, "e" );
// { value: 5, writable: true, enumerable: true,
// configurable: true }
Object.getOwnPropertySymbols( target );
// [Symbol("g")]
复制过程会忽略属性 d、f 和 Symbol("h");不可枚举的属性和非自有的属性都被排除在赋
值过程之外。另外,e 作为一个普通属性赋值被复制,而不是作为只读属性复制。
在前面一节中,我们展示了使用 setPrototypeOf(..) 设定对象 o2 和 o1 之间的 [[Prototype]]
关系。还有另外一种应用了 Object.assign(..) 的形式:
var o1 = {
foo() { console.log( "foo" ); }
};
var o2 = Object.assign(
Object.create( o1 ),
{
// .. o2的定义 ..
}
);
// 委托给o1.foo()
o2.foo(); // foo
Object.create(..) 是 ES5 工具,创建一个 [[Prototype]] 链接的空对象。参
见本系列《你不知道的 JavaScript(上卷)》第二部分获取更多信息。
6.3 Math
ES6 增加了几个新的数学工具,填补了常用计算方面的空白。这些工具都可以手动计算,
但是其中多数现在有了原生定义,所以某些情况下 JavaScript 引擎可以更优化地执行这些
计算,或者执行比手动版本精度更高的计算。
这些工具的使用者更可能是 asm.js/transpile 的 JavaScript 代码(参见本系列《你不知道的
JavaScript(中卷)》第二部分),而非直接开发者。
212 | 第 6 章
图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权