2013-07-11 165 views
0

幾天前我開始OOP,所以我沒有體驗過。我想知道是否有機會改變類屬性的值以影響所有使用該類的對象?更改類變量的值

例子:

function Balloon(ID){ 
    this.ID = ID; 
    this.speed = 1; 
} 

比方說,我有5個氣球對象。現在我想將其所有速度值更改爲2,而不使用for循環。

+0

那些不是「類屬性」。它們是**實例**屬性,因爲它們是在每個實例對象上獨立設置的。 – Pointy

+1

沒有迭代你感興趣的兩個氣球,現在有辦法實現你想要的。畢竟,你需要知道五個氣球中的哪一個需要首先改變。您可以使用班級「成員」更改所有5個氣球(請參閱Trogvar的答案),或者您必須單獨更改它們。 –

+0

請在此處澄清@Neal,您希望將氣球類的所有對象的速度值更改爲2。因爲他低估了我的答案。謝謝:) – Trogvar

回答

3

您可以使用prototype了點。請看下面的例子:

function Balloon(ID){ 
    this.ID = ID; 
} 

Balloon.prototype.speed = 1; 

b1 = new Balloon(1); 
b2 = new Balloon(10); 

console.log(b1.speed); // outputs 1 
Balloon.prototype.speed = 15; 
console.log(b2.speed); // outputs 15, which is now also 15 for all other Balloon instances 
+0

唉唉我的登錄信息,但OP只希望改變** 2 **的氣球的速度。 **不是**全部5.(抱歉,但是從我的'-1') – Neal

+0

我認爲你誤解了他的發言。重讀它。這部分'是否有機會改變類屬性的值以影響所有對象'。 而他的評論中的'2'部分與新的速度值有關: – Trogvar

+0

我也正確讀取它。你沒有保持上下文 - 他想在2 **上改變**速度值。如果你注意他的帖子的開頭,他想爲**所有**對象做。 – Trogvar

0

那麼你就需要編輯對象的本地靜態變量:

var Balloon = (function(){ 

    var speed = null; 

    function Balloon(ID){ 
     this.ID = ID; 
     speed = 1; 
    } 

    return Balloon; 

})(); 

的問題是,現在所有氣球將共享相同的速度! AHH!
這並不好......爲了改變速度,你需要爲它創建一個getter/setter ...你真的不需要你的情況。

所以 - 改變在同一時間所有可能Balloon型物體的速度,同時允許每個氣球技術上有不同的速度,唯一的結論就是去每個Balloon對象和改變速度(抱歉)

+0

好的,所以我會使用循環。謝謝! – mkkrolik

+0

我很樂意幫助@ user1769428 :-D – Neal

+0

Hehee ......而且我也將改變在任何人的名字:) – mkkrolik