想象以下代码:使用Javascript:对所有对象添加方法在阵列
$.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()
}
和工作正常,但试想,有检索颜色列表,或者用户可以创建新的颜色实例的方法不止一种,那我上面做的定制比较复杂。我现在需要复制上面的“附加”逻辑。有更聪明的方法吗?
我的大部分时间都花在强类型语言上,有时候这些东西对我来说并不那么明显。感谢您的任何建议...
-Ben
为什么功能添加到每个对象?只需制作一个接受对象作为参数的函数即可。 –