javascript - 围绕对象键的数组符号

标签 javascript generator

let obj = {
  a: 'alex',
  [Symbol.iterator] : function* () {
    yield this.a;
  }
}

在学习 Generator 时遇到了这段代码。想知道我们使用 [] 包围对象属性的这种语法 [Symbol.iterator] 的术语是什么?我们可以将它应用于任何其他属性还是仅适用于 Symbol.iterator

此外,是否有可能使其像任何其他函数一样可重用,例如下面的代码

let obj = {
  a: 'alex',
  [Symbol.iterator] : function* () {
    yield this.a;
  },
  getA: function() {
    return this.a
  }
}


console.log(obj.getA())//Perhaps obj.[Symbol.iterator]()............... ?

最佳答案

在现代 JavaScript 中,括号中的属性名称如 [Symbol.iterator] 意味着应评估括号中的表达式以确定声明中的属性名称。

表达式 Symbol.iterator 的计算结果为 Symbol 实例,用于识别可迭代对象的迭代器函数属性。

在“老式”JavaScript 中,代码可以写成:

let obj = {
  a: 'alex',
  getA: function() {
    return this.a
  }
};

obj[Symbol.iterator] = function* () {
    yield this.a;
};

(显然这不是真正“老式的”JavaScript,因为 Symbol 功能是新的,但希望它很清楚。)

关于javascript - 围绕对象键的数组符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50616035/

相关文章:

javascript - 您可以选择 $(document).ready() 调用中的目标文档吗?

javascript - 具有双向数据绑定(bind)的嵌套 ngFor Angular2

javascript - jQuery 导航轮播

ruby-on-rails - 测试数据生成器 CSV - 类似于 Mockaroo

Keras:flow_from_directory 在 fit_generator 调用期间保存了太多图像

javascript - 我如何根据我的 YML 构建文件在 Javascript 中要求不同的模块?

python - 在生成器上使用枚举来解析文本

python-3.x - 如何在 os find 函数中使用生成器(如包装器)?

python - 如何从可迭代的保持原始索引中枚举选定的元素?

javascript - 在 Angularjs 指令中包含 SVG 模板