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]()............... ?
答案 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
功能是新的,但希望它很清楚。)