gpt4 book ai didi

javascript - 当函数重新定义自身时,原型(prototype)会发生什么变化?

转载 作者:搜寻专家 更新时间:2023-11-01 05:13:24 25 4
gpt4 key购买 nike

我在JavaScript Patterns中看到了下面的代码Stoyan Stefanov 的书(经过编辑以去除多余的脂肪):

function Universe() {
var instance = this;
Universe = function() {
return instance;
}
}

Universe.prototype.nothing = true;
var uni = new Universe();
Universe.prototype.everything = true;
var uni2 = new Universe();

uni.nothing; // true
uni2.nothing; // true, but I was expecting undefined
uni.everything; // undefined
uni2.everything; // undefined, but I was expecting true

我期望 nothing 被分配给原始函数的原型(prototype),everything 被分配给闭包的原型(prototype)(因为第二次分配发生在重新定义之后)。但是,输出显示发生了一些奇怪的事情,而这本书确实没有解释。我还注意到:

    正如我所料,
  1. Universe.prototype 确实在函数被重新定义后指向了一个不同的对象。
  2. 在重新定义之后创建的更多实例仍然将原始原型(prototype)对象作为它们的 __proto__。这就是我不明白的。

谁能解释一下?

最佳答案

这是一个单例模式。第一次创建 Universe 时,Universe 符号被重新定义。 (不过,它仍然处于某种不确定状态:实例对它有一些引用。__proto__ 例如在非严格模式下。)

新的 Universe 符号实际上不是构造函数,它只是返回第一个创建的实例。第二次调用中的 new 关键字创建了一个以第二个 Universe 作为原型(prototype)的新实例,但新函数只是忽略它并返回存储的第一个实例。

关于javascript - 当函数重新定义自身时,原型(prototype)会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158573/

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