我在Stoyan Stefanov撰写的JavaScript Patterns书中看到了以下代码(已编辑为删除多余的脂肪):
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)(因为第二次分配发生在重新定义之后)。但是,输出结果表明发生了一些奇怪的事情,而这本书并没有真正解释它。我还注意到:如我所料,
Universe.prototype
在函数重新定义后确实指向另一个对象。 __proto__
。那是我不明白的。 有人可以解释吗?
最佳答案
uni
和uni2
是同一个对象,因为instance
函数的两个版本都返回Universe
的值。
这是相同的代码,但是没有从重新定义的instance
返回Universe
:http://jsfiddle.net/nmaBn/