为什么这个getter返回undefined?

时间:2016-03-19 12:09:53

标签: javascript getter

这是一个迭代数组的getter示例,预计会返回Modulea的元素。但true会返回test.active

undefined

为什么?

2 个答案:

答案 0 :(得分:2)

您的return语句位于内部函数中,导致该函数返回。事实上你的外部功能确实没有返回。

如果要返回外部函数,请改为使用普通的for循环。

var test = {
  arr: [
    {id: 1, a: false},
    {id: 2, a: false},
    {id: 3, a: true},
    {id: 4, a: false},
    {id: 5, a: false},
  ],
  get active() {
    for (var i = 0, e = this.arr.length; i < e; i++) {
      var item = this.arr[i];
      if (item.a) return item;
    }
  }
}

console.log(test.active);

如果您了解forEach的工作方式,可能会有所帮助。

在内部,它看起来很像以下,但这是非常简化。

function forEach (array, block) {
  var i, length = array.length;
  
  for (i = 0; i < length; i++) {
    // This is where your return would end up, unused, in a different context.
    block(array[i], i);
  }
}


forEach(['a', 'b', 'c', 'd'], item => {
  return 'is meaningless here';
});

答案 1 :(得分:0)

或者,您可以使用Array.prototype.find()函数测试给定条件并返回找到的元素。

var test = {
  arr: [
    {id: 1, a: false},
    {id: 2, a: false},
    {id: 3, a: true},
    {id: 4, a: false},
    {id: 5, a: false},
  ],
  get active() {
    return this.arr.find(item => {
      return (item.a === true);
    });
  }
}

alert(test.active.id)

https://jsfiddle.net/arqxcbkv/1/