- 57
- 0
深入理解es6 p146,看到一串代码:
代码前的引言:
既然生成器方法很有用,那么在表示集合的自定义类中定义一个默认迭代器,那就更好。你可以使用 Symbol.iterator 来定义生成器方法,从而定义出类的默认迭代器,就像这样:
class Collection {
constructor() {
this.items = [];
}
*[Symbol.iterator]() {
yield *this.items.keys();
}
}
var collection = new Collection();
collection.items.push(1);
collection.items.push(3);
collection.items.push(2);
for (let x of collection) {
console.log(x);
}
全书 *this 用法只此一处,这个地方我不明白,这是什么用法?我测试了下, *this 的代码可以这样替换:
class Collection {
constructor() {
this.items = [];
}
*[Symbol.iterator]() {
for (let item of this.items.keys()) {
yield item;
}
}
}
var collection = new Collection();
collection.items.push(1);
collection.items.push(3);
collection.items.push(2);
for (let x of collection) {
console.log(x);
}
如果* this 代码不改,换一种实现方式也可以
class Collection {
constructor() {
this.items = [];
}
*[Symbol.iterator]() {
yield *this.items.keys();
}
}
var collection = new Collection();
collection.items.push(1);
collection.items.push(3);
collection.items.push(2);
/*for (let x of collection) {
console.log(x);
}*/
for (let x of collection.items.keys()) {
console.log(x);
}
但是我始终不能理解这个用法是为什么,因为我觉得没有 * 也是可以的,但是实际上测试没有 * 就不对了,于是我就猜测,难道这里是这么个意思?把 this.items.keys 当成生成器函数?但是觉得不合理
class Collection {
constructor() {
this.items = [];
}
*[Symbol.iterator]() {
yield *(this.items.keys)();
}
}
var collection = new Collection();
collection.items.push(1);
collection.items.push(3);
collection.items.push(2);
for (let x of collection) {
console.log(x);
}
所以有人知道这里的 *this 到底是什么逻辑么?
书上这么解释的
此例为生成器方法使用了一个需计算名称,并将此方法委托到 this.items 数组的 keys()
迭代器上。任意管理集合的类都包含一个默认迭代器,这是因为一些集合专用的操作都要求
目标集合具有迭代器。现在, Collection 的任意实例都可以在 for-of 循环内被直接使
用,也能配合扩展运算符使用。
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

