如何更改一个实例的数组

时间:2015-06-22 08:59:12

标签: javascript oop prototype

代码的相关部分:

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");

因为'原型'将在所有实例之间共享我的颜色数组。

那么如何影响一个实例的颜色数组呢?

2 个答案:

答案 0 :(得分:0)

你是否有可能为每个对象使用相同的实例,这就是改变颜色值的原因,它随处可见。尝试为每个.myClass

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

告诉我你是否需要更多帮助。

答案 1 :(得分:-1)

最后,我通过使用简单变量col0,col1而不是使用数组来解决问题。

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