我正在學習JS原型。瞭解JavaScript原型
如果我從一些其它的構造(B)的實例設置的原型構造(A)的是,例如(的B)將介紹在共享屬性?
實施例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
屬性在這兩種情況下獨立存在?但是原始屬性不變,但getter/setter是通過原型定義的。 - 可以將示例1視爲單例屬性的實現嗎?
- 原型通過實例和原型通過原型,有什麼區別?例如
B.prototype = new A();
B.prototype = (new A()).constructor.prototype
- 什麼是原型的完整的祕密?
是的,一個簡單的對象文字可以是單身對象的故意選擇。但是部分單例屬性可以用這種方式實現。我有一個場景,其中不同的fx對象擁有獨立的配置,但共享他們操作的dom元素的參考。 –
@ShuaibNawaz我不熟悉* partial * singleton的概念:P – Esailija
我不打算推出一個新的術語。 :D我的意思是在實例中定義幾個共享屬性,它適用於我的場景,我不清楚它的概念。不管怎樣,謝謝你。 –