gpt4 book ai didi

javascript - 向上迭代构造函数链

转载 作者:行者123 更新时间:2023-11-29 10:42:34 24 4
gpt4 key购买 nike

假设我有这样的东西:

function A() {}

function B() {}
B.prototype = Object.create(A.prototype);

function C() {}
C.prototype = Object.create(B.prototype);

var inst = new C();

我现在可以执行 inst instanceof C == true,inst instanceof B == true,instanceof C == true。

但是我如何从 C() 的实例开始“迭代”构造函数,以便它返回函数 C()、函数 B()、函数 A(),然后我可以使用它们来实例化另一个实例。

最佳答案

您可以通过以下方式迭代原型(prototype)

for (var o=inst; o!=null; o=Object.getPrototypeOf(o))
console.log(o);
// {}
// C.prototype
// B.prototype
// A.prototype
// Object.prototype

但是,那只会迭代原型(prototype)链。没有“构造函数链”这样的东西。如果你想访问构造函数,你需要 set the .constructor property继承时适本地在原型(prototype)上:

function A() {}

function B() {}
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

function C() {}
C.prototype = Object.create(B.prototype);
C.prototype.constructor = C;

var inst = new C();

for (var c=inst.constructor; c!=null; (c=Object.getPrototypeOf(c.prototype)) && (c=c.constructor))
console.log(c);
// C
// B
// A
// Object

which I could then use to instantiate another instance

为此,您只需要了解 C,而不是“链”。如果您已正确设置 C.prototype.constructor,则可以通过 inst.constructor 访问它。

但是,从任意构造函数实例化对象可能不是一个好主意;您不知道所需的参数。我不知道你是什么actually want to do ,但您的请求可能暗示存在设计缺陷。

关于javascript - 向上迭代构造函数链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25875018/

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