首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并两条原型链

合并两条原型链
EN

Stack Overflow用户
提问于 2014-01-22 14:32:42
回答 1查看 375关注 0票数 1

我有一个现有的原型链:

代码语言:javascript
复制
{ name: 'layer2' } <- { name: 'layer1' }

。我希望能够在一个不同的原型链之上“重新建立”这个链,比方说:Element.prototype。这个是可能的吗?

代码语言:javascript
复制
var layer1 = { name: 'layer1' };
var proto = Object.create(one);

proto.name = 'layer2';

// prototype chain: layer2 <- layer1 <- Object

var ElementProto = Element.prototype;

// desired prototype chain: layer2 <- layer1 <- ElementProto <- Object

注意:--我不想使用__proto____,也不想改变两个原始原型链中的任何一个,因为它们可能在其他地方使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 14:54:34

注:我还没有完全的解决办法,但在大纲上,我认为你必须:

从原型链的顶部开始,对于“类型”,使用Object.getOwnPropertyNames()查找属性,并对每个属性使用Object.getOwnPropertyDescriptor()

使用Object.getPrototypeOf获取__proto__字段以查找链中的下一个类型。

我认为您需要递归地执行上述操作,直到您到达Object.prototype为止。

然后,递归回链,使用Object.create创建一个新对象,该对象与原始原型共享相同的属性,但具有不同的prototype对象(即您试图在链中插入的对象或上一次传递的结果)。

编辑我的尝试是在http://jsfiddle.net/alnitak/xkX5v。它使用ES5方法来安全地尝试确保不可枚举属性保持不变,并且getter和setter按预期工作。

我看到了一些缺陷,但没有尝试解决,例如: 1.新创建的类型没有构造函数。2.无法调用添加到原型链中的函数的构造函数,等等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21285741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档