javascript - 为什么这个 getter 返回未定义?

标签 javascript getter

下面是一个 getter 示例,它迭代数组,并期望返回 atrue 的元素。但 test.active 返回 undefined

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() {
    this.arr.forEach(item => {
      if(item.a) return item
    })
  }
}

为什么?

最佳答案

您的 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';
});

关于javascript - 为什么这个 getter 返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36101539/

相关文章:

c# - 如何使用javascript获取 session 值

javascript - $.getScript 不工作 Rails 3

dart - Dart:何时使用 setter/getter 与最终剂

Pythonic 替代 dict-style setter?

c++ - 在面向值的属性 setter 中使用 std::move() 是否有任何陷阱?

javascript - x未定义,setTimeout问题

javascript - 在 jQuery/JS 中旋转时触发事件的旋钮

c++ - .h 中定义 setter 和 getter 是否导致代码或多或少可读?

IE8 中的 JavaScript getter 支持

javascript - 如何使用 Umbraco 修复 JavaScript 语法错误?