私はJSプロトタイプについて学んでいます。
他のコンストラクター (B) のインスタンスからコンストラクター (A) のプロトタイプを設定した場合、その (B の) インスタンスは A に共有プロパティを導入しますか?
例 1
function A(){
var private = '';
this.getPrivate = function(){
return private
};
this.setPrivate = function(_private){
private = _private;
};
}
function B(){};
B.prototype = new A();
b1 = new B();
b2 = new B();
b1.setPrivate(new Date());
b2.getPrivate(); // Here `private` is behaving as singleton property. Why?
例 2
function A(){
var private = '';
}
A.prototype.getPrivate = function(){
return this.private
};
A.prototype.setPrivate = function(_private){
this.private = _private;
};
function B(){};
B.prototype = new A();
b1 = new B();
b2 = new B();
b1.setPrivate(new Date());
b2.getPrivate(); // This time private is not singleton property.
遊んでいるうちに、プロトタイプのこの新しい側面を発見しました。
- 例 1 では、
private
プロパティが異なるインスタンス間で共有されるのはなぜB
ですか? - 例 2 では、
private
プロパティが両方のインスタンスで独立して存在するのはなぜですか? ただし、元のプロパティは変更されていませんが、ゲッター/セッターはプロトタイプを介して定義されています。 - 例 1 は、シングルトン プロパティの実装と見なすことができますか?
- インスタンスによるプロトタイピングとプロトタイプによるプロトタイピング、違いは何ですか? 例えば
B.prototype = new A();
B.prototype = (new A()).constructor.prototype
- プロトタイピングの完全な秘密は何ですか?