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/