在for循环中分配值以用作对象属性

时间:2019-12-14 03:00:36

标签: javascript arrays

我正在尝试创建对象数组。一个对象属性是一个函数,我想根据该对象在数组中的编号来更改其值。

当我尝试使用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)}

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);