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) 专享 尊重版权
   230   231   232   233   234   235   236   237   238   239   240