gpt4 book ai didi

Javascript:将方法添加到数组中的所有对象

转载 作者:数据小太阳 更新时间:2023-10-29 05:23:03 25 4
gpt4 key购买 nike

想象一下下面的代码:

$.get( "ajax/getColorData.php", function( data ) {
this.colorData = data;
});

现在设想“data”的值是:

this.colorData = [
{
colorName: 'Red',
colorIsInRainbow:true
},
{
colorName: 'Orange',
colorIsInRainbow: true
},
{
colorName: 'Magenta',
colorIsInRainbow: false
}
];

问题一

现在,在我下载数据后,假设我想为数组中的每个条目添加一个方法“colorStartsWithR”。我“认为”与其在数组的每个成员上定义它,不如在原型(prototype)上定义这个方法。但是,我不确定我能否做到这一点,因为这些对象不是我创建的,而是由 $.get 返回的,所以我不清楚我的思考方向是否正确。

问题二

更进一步,如果我想为数组的每个成员添加一个属性,具体来说:

    {
colorName: 'Magenta',
colorIsInRainbow: false,
userClickedThisColor:ko.observable()
}

这样,我就可以绑定(bind)(通过 knockoutjs)列表并包含一个复选框。在这种情况下,我怀疑原型(prototype)是否会派上用场,因为每个成员都应该有自己的 ko.observable 属性。一个快速的直觉是做类似的事情:

for (var i=0;i<this.colorData.length;i++)
{
this.colorData[i].userClickedThisColor=ko.observable()
}

这很好用,但假设有不止一种方法可以检索颜色列表,或者用户可以创建新的颜色实例,而我在上面所做的自定义更复杂。我现在需要复制上面的“附加”逻辑。有没有更聪明的方法?

我大部分时间都花在强类型语言上,有时这些事情对我来说并不那么明显。感谢您的任何建议...

-本

最佳答案

嗯,那些对象没有特殊的原型(prototype),所以你不能给它添加成员。我认为这些是替代方案:

1) 将成员添加到每个实例(我知道您不喜欢它,但这是一个选项)。我会选择这个选项

2) 只需创建一个方法,并将每个对象作为参数或作为 this 传递给 fn.call()

3) 用添加的成员创建一个“类”,然后创建它的实例并在构造函数中传递原始对象。不理想,但也许你必须这样做。

function Color(plainObj){
this.colorName: plainObj.colorName;
this.colorIsInRainbow: plainObj.colorIsInRainbow;

//if you want all properties to be copied dynamically, uncomment the following:
//for(var key in plainObj) this[key] = plainObj[key];

this.userClickedThisColor = ko.observable()
...
}
Color.prototype.colorStartsWithR = function() {
return this.colorName.charAt(0) == "R";
};

//etc

然后,应用它

for(var i=0; i<colorData.length; i++){
colorData[i] = new Color(colorData[i]); //Overwrites original colorData array
}

希望这对您有所帮助。干杯

关于Javascript:将方法添加到数组中的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20985518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com