想象一下下面的代码:
$.get( "ajax/getColorData.php", function( data ) {
this.colorData = data;
});
现在设想“数据”的价值是:
this.colorData = [
{
colorName: 'Red',
colorIsInRainbow:true
},
{
colorName: 'Orange',
colorIsInRainbow: true
},
{
colorName: 'Magenta',
colorIsInRainbow: false
}
];
问题 1
现在,在我下载数据之后,假设我想为数组中的每个条目添加一个方法“colorStartsWithR”。我“认为”与其在数组的每个成员上定义它,不如在原型上以某种方式定义这个方法。但是,我不确定我能做到这一点,因为这些对象不是我创建的,而是由 $.get 返回的,所以我不清楚我是否在思考正确的方向。
问题2
更进一步,如果我想为数组的每个成员添加一个属性怎么办,特别是:
{
colorName: 'Magenta',
colorIsInRainbow: false,
userClickedThisColor:ko.observable()
}
这样,我可以绑定(通过 knockoutjs)列表并包含一个复选框。在这种情况下,我怀疑原型是否会派上用场,因为每个成员都应该有自己的 ko.observable 属性。一个快速的直觉是做类似的事情:
for (var i=0;i<this.colorData.length;i++)
{
this.colorData[i].userClickedThisColor=ko.observable()
}
这很好用,但是想象一下检索颜色列表的方法不止一种,或者用户可以创建新的颜色实例,并且我上面所做的自定义更加复杂。我现在需要复制上面的“附加”逻辑。有没有更聪明的方法?
我大部分时间都在使用强类型语言,有时这些事情对我来说并不那么明显。感谢您的任何建议...
-本