我如何创建一个对象与给定的原型链
How can I create an object with a given prototype chain?
我需要一种方法来创建一个空对象,其原型链是作为对象数组提供的:
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
方法将这些对象组装成一个链。但是现在,跨浏览器,你不能。
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- Javascript:如何附加到构造函数的原型,如果该构造函数已经在另一个对象的原型上定义
- 使用 Function.apply() 构造一个带有原型的对象
- 我应该如何对具有相同原型的另一个对象的“私有”成员进行操作
- JavaScript引擎如何在具有原型的对象上设置属性,并为该属性设置一个setter
- Node.JS:调试知道一个对象'的原型名称
- 节点v0.10.36显示一个对象的原型
- 从第一个对象创建的另一个对象中访问对象原型变量
- 这是将一个对象原型复制到另一个对象原型的安全方法吗?
- 如何使一个对象在其原型中继承两个对象?
- 如何检查一个对象是否是JavaScript中某一组原型的实例?
- 如何从一个没有原型的对象中创建一个带有默认原型的JS对象
- 如何使一个对象成为它自己的原型属性的实例
- 在Javascript中,当一个对象的原型被赋值为另一个对象的实例时,获取该对象的类型
- 我该如何处理一个对象以便制作原型
- 从另一个对象的方法调用一个对象的原型方法
- 我如何创建一个对象与给定的原型链