探索JS上的Object.assign文本的勘误表?

时间:2017-07-03 18:08:46

标签: javascript object ecmascript-6 prototype

Axel Rauschmayer Emanauten的

Exploring JS,一本关于ES6的非常受欢迎的书,说,

  

如果希望克隆具有与原始克隆相同的原型,则可以使用Object.getPrototypeOf()和Object.create():

function clone(orig) {
   const origProto = Object.getPrototypeOf(orig);
   return Object.assign(Object.create(origProto), orig);
}

但这似乎不是真的,

var a = {a:1};
var o1 = Object.create(a);
Object.getPrototypeOf(o1); //shows {a:1} of course
var o2 = Object.assign(o1);
Object.getPrototypeOf(o2); // also shows {a:1}

那么他们为什么要说"与原版相同的原型"在克隆?似乎Object.assign已经为它提供了与原始原型相同的原型,并且似乎clone()他们正在从原型创建所有可枚举方法的副本,完全失去与原型的链接。

1 个答案:

答案 0 :(得分:3)

var o2 = Object.assign(o1);

等于:

var o2 = o1;

as Object.assign返回第一个参数。以下参数将复制到第一个参数中,因此您可以执行以下操作:

var o2=Object.assign({},o1);

你看到除了原型之外他们是平等的......