在解释如何使用户定义的可迭代的教程中,它说
那么我们如何在自己的对象上实现可迭代协议呢?我们通过定义一个带有 Symbol.iterator 键的方法来实现这一点。
[Symbol.iterator]
鉴于它是方法的一部分,将其称为键是否正确?我的理解是键只能是属性的一部分(属性由键和值组成),而方法是对象内部使用的函数。
作为参考,这是教程中的示例:
class UserCollection {
constructor(users) {
this.users = [].concat(users);
}
[Symbol.iterator]() {
let i = 0;
let users = this.users;
return {
next() {
if (i < users.length) {
return { done: false, value: users[i++] };
}
return { done: true };
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
在 ES6 中,您可以通过表达式定义方法名称,使用[]
. 这允许您创建计算的方法名称(计算的键)。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions
例如,以下内容都是等效的:
class Foo {
myMethod() {}
}
class Foo {
['my'+'Method']() {}
}
const m = 'myMethod';
class Foo {
[m]() {}
}
Run Code Online (Sandbox Code Playgroud)
所有 3 个都创建Foo.myMethod()
.
在您的情况下,[Symbol.iterator]
允许您获取iterator
符号,并将该符号指定为方法名称。
归档时间: |
|
查看次数: |
180 次 |
最近记录: |