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
割り当てられ、クロージャーのプロトタイプに割り当てられることを期待していました (2 番目の割り当ては再定義後に発生するため)。ただし、出力は何か奇妙なことが起こっていることを示しており、本では実際には説明されていません。また、次のことに気付きました。
Universe.prototype
私が予想したように、関数が再定義された後、別のオブジェクトを指します。- 再定義後に作成された追加のインスタンスは、元のプロトタイプ オブジェクトを として引き続き取得します
__proto__
。それは私が理解していないものです。
誰か説明してくれませんか?