bfa*_*tto 4 javascript prototype
我在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
Run Code Online (Sandbox Code Playgroud)
我期望nothing被分配到原始函数的原型,并被everything分配给闭包的原型(因为第二次赋值在重新定义之后发生).然而,输出结果表明发生了奇怪的事情,而这本书并没有解释它.我也注意到:
Universe.prototype 正如我所料,在重新定义函数后,它会指向不同的对象.__proto__.这就是我不明白的地方.有人可以解释一下吗?
这是一个单身人士模式.第一次创建Universe时,将重新定义Universe符号.(它仍然存在于某种不确定性中:实例有一些参考它.例如,__proto__在非严格模式下.)
新宇宙符号是不是实际上是一个构造函数,它只是返回第一个创建的实例.第二个调用中的new关键字创建一个新实例,第二个Universe作为原型,但新函数只是忽略它并返回存储的第一个实例.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |