我在 Stoyan Stefanov 的JavaScript 模式一书中看到了以下代码(经过编辑以去除多余的脂肪):
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
被分配给原始函数的原型,并被everything
分配给闭包的原型(因为第二次分配发生在重新定义之后)。但是,输出显示发生了一些奇怪的事情,而这本书确实没有解释它。我还注意到:
Universe.prototype
正如我所料,重新定义函数后确实指向不同的对象。- 重新定义后创建的其他实例仍将原始原型对象作为其
__proto__
. 这就是我不明白的。
有人可以解释一下吗?