gpt4 book ai didi

javascript - 合并两个原型(prototype)链

转载 作者:行者123 更新时间:2023-11-30 12:50:01 25 4
gpt4 key购买 nike

我有一个现成的原型(prototype)链:

{ name: 'layer2' } <- { name: 'layer1' }

.我希望能够在不同的原型(prototype)链之上“ rebase ”这条链,比方说:Element.prototype。这可能吗?

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__,我也不想改变两个原始原型(prototype)链中的任何一个,因为它们可能在别处使用。

最佳答案

注意:我还没有完整的解决方案,但大体上我相信您必须:

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

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

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

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

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

我可以看到某些缺陷,但还没有尝试解决,例如1. 新创建的类型没有构造函数 2. 无法调用添加到原型(prototype)链的函数的构造函数等。

关于javascript - 合并两个原型(prototype)链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com