我正在尝试创建对象数组。一个对象属性是一个函数,我想根据该对象在数组中的编号来更改其值。
当我尝试使用for循环中的'i'值时,该值未在函数中保留为数字。它仍然是一个变量。
var array = [];
for (var i = 0; i<number; i++){
array[i].someFunction = function(i) {console.log(i)}}
但是,当我调用该属性(即)中保存的值时:
console.log(array[2].someFunction)
它返回{console.log(i)}
而不是我想要的{console.log(2)}
。
答案 0 :(得分:0)
它仍然引用i,此后已更改为(number-1)。将值保存在您不知道会更改的地方,也许在对象本身中:
var array = [{}, {}, {}];
for(var i = 0; i < array.length; i++){
array[i].index = i;
array[i].someFunction = function(){console.log(this.index);}
}
//and see that it's working...
for(var i = 0; i < array.length; i++){
array[i].someFunction();
}
答案 1 :(得分:0)
基本上,您的代码中有一些问题,例如:
number
var
代替let
这里有可行的解决方案。
var array = [];
// numbers was not defined.
const number = 10;
// use let instead of var
for (let i = 0; i < number; i++) {
// you are not instantiating your object, here is an example.
array[i] = {
"foo": "bar",
"index": i,
}
// you have to change i to j, because if you use i
// it will be the parameter of the function
array[i].someFunction = function(j) {
console.log('index: ', i);
console.log('parameter: ', j)
}
}
// we see the function
console.log(array[2].someFunction)
// we call the function succesfully
array[2].someFunction(100);