我如何创建一个对象与给定的原型链

How can I create an object with a given prototype chain?

本文关键字:原型 一个对象 何创建 创建      更新时间:2023-09-26

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

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}

我该怎么做?

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

可以做的是用复制那些对象的创建链,但是当然对这些原始对象的后续更改不会反映在链中。

你可以用ECMAScript5来获得关闭,方法是为这些源对象上的所有现有属性创建带有getter和setter的新对象,并同步它们,但这不能处理新的属性(或删除的属性),只能更改现有的属性。


*我在上面说"当前"是因为下一个ECMAScript版本(ECMAScript第6版)的当前规范草案中有一个新的Reflect对象,它能够回顾性地在现有的对象上设置原型。(然而,使用ECMAScript5和更早的版本,您只能在创建对象时设置对象的原型。)因此,在ES6中,您可以使用未来的Reflect.setPrototypeOf方法将这些对象组装成一个链。但是现在,跨浏览器,你不能。