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()
他们正在从原型创建所有可枚举方法的副本,完全失去与原型的链接。
答案 0 :(得分:3)
var o2 = Object.assign(o1);
等于:
var o2 = o1;
as Object.assign返回第一个参数。以下参数将复制到第一个参数中,因此您可以执行以下操作:
var o2=Object.assign({},o1);
你看到除了原型之外他们是平等的......