2015-06-22 57 views
1

代碼的相關部分的數組:如何改變一個實例

function myObj(wgtId, options, parentPage) { 
    if (!wgtId) return; 

    this.colors=['red','pink']; 
    hmiWidget.call(this, wgtId, options, parentPage); 
} 

myObj.prototype = new hmiWidget(); // Inheriting the base class Widget 

myObj.prototype.setValue = function (newValue) { 
    var index = newValue; 
    var color = this.colors[index]; 
    this.elem.style.backgroundColor = color; 
}; 

$hmi.fn.myObj = function (options, parentPage) { 
    return new myObj(this.wgtId, options, parentPage); 
}; 

用法:

$(".myClass").myObj({colors:['#ccccff','#000099']}); // start with blue 
    . . . 
    objWidget.setValue(newVal); 

這一切運作良好。

現在我需要更改特定實例的顏色數組。

我試圖用 -

objWidget.colors[0] = "#ccffcc"; 

,但它影響所有實例。 (我不明白爲什麼所有的情況下都受到影響。)

Javascript object members that are prototyped as arrays become shared by all class instances 我明白,我不能添加和使用

code: 
myObj.prototype.setColor = function (index, newColor) { 
    this.colors[index] = newColor; 
} 
usage: 
objWidget.setColor(0, "#009900"); 

因爲「原型」將分享我所有的顏色實例之間的陣列。

那麼如何才能影響只有一個實例的顏色數組?

+1

你在哪裏創建objWidget?你使用的是新關鍵字嗎? –

+0

好像每個實例已經有了它自己的'color'數組,所以你不應該有任何問題,請創建一個可運行的例子 –

+0

$( 「.myClass」)。myObj({colors:['#ccccff','#000099']}); //我不使用new關鍵字 – Atara

回答

-1

最後,我通過使用簡單變量col0,col1而不是使用數組來繞過問題。

不是最優的,但解決了我目前的需求。 :(

0

是否有可能您爲每個對象使用相同的實例,這就是爲什麼更改顏色值,它隨處可見。嘗試爲每個.myClass創建新實例

$hmi.fn.myObj = function (options, parentPage) { 
    return this.each(function(){ 
     (new myObj(this.wgtId, options, parentPage));   
    }); 
}; 

如果您需要更多幫助,請告訴我。

+0

試過了。但它沒有幫助。 (需要在建議代碼的第3行末尾添加')'。 – Atara

相關問題