假设您有一个字符串数组,例如:
var fruit = ["apple","peach","pear","plum"];
以及一个要填充对象的空数组,每个对象都有一个绑定到水果数组特定索引的文本属性:
var objlist = [];
for (var i=0;i<fruit.length;i++) {
objlist.push({text: fruit[i]});
}
//objlist[0].text = "apple", objlist[1].text = "peach", etc.
有没有办法“绑定”第一个数组的元素,所以下面的语句:
fruit.shift()
会导致 objlist 中对象的文本属性更新为水果数组中的相应索引吗?
//objlist[0].text = "peach", objlist[1].text = "pear", etc.
我已经接受了 .text 可能必须是一个函数 .text() 的事实,但这对我的目的来说是可以的。
由于明显的原因,以下内容不起作用:
for (var i=0;i<fruit.length;i++) {
objlist.push({text: function() { return fruit[i]; }}); //i is not bound
}
然而,这完美地工作:
[0,1,2,3].forEach(function(i) {
objlist.push({text: function() { return fruit[i]; }}); //i is bound
});
使用第二种方法,我可以修改 fruit[] 并且 objlist 会相应地更新,但这并不优雅。
我的问题:有没有更好的方法来做到这一点?也许类似于使用指针的东西?