如何使用给定的原型链创建对象?

时间:2014-03-24 19:24:52

标签: javascript

我需要一种方法来创建一个空对象,其原型链作为对象数组提供:

var prototypes = [{one: 1}, {two: 2}, {three: 3}];
var created = create(prototypes);
// prototype chain of created should be:
// created --> {one: 1} --> {two: 2} --> {three: 3}

我该怎么做?

1 个答案:

答案 0 :(得分:2)

你基本上不能(目前*),因为只有一个原型链,原型目前仅在创建对象时分配,但是你有多个不相关的离散对象。也就是说,要创建链,您需要链中的每个对象都由前一个对象支持,但那些不是。

可以做的是使用这些对象的副本创建链,但当然对这些原始对象的后续更改不会反映在链中。< / p>

您可以使用ECMAScript5获取 close ,方法是为这些源对象上的所有现有属性创建带有getter和setter的新对象并同步它们,但这不会处理 new 属性(或删除的属性),只是对现有属性的更改。


*我之前说过“当前”,因为下一个ECMAScript版本ECMAScript第6版的当前草案规范有一个新的Reflect对象,它能够在现有上设置原型对象追溯。 (而对于ECMAScript5及更早版本,您只能在创建对象时设置对象的原型。)从ES6开始,您可以使用未来的Reflect.setPrototypeOf方法将这些对象组装到一个链中。但是现在,跨浏览器,你不能。