围绕对象键的数组表示法

时间:2018-05-31 03:02:50

标签: 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]()............... ?

1 个答案:

答案 0 :(得分:3)

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

表达式Symbol.iterator求值为Symbol实例的distinguished属性,以标识可迭代对象的迭代器函数属性。

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

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

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

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