间接访问返回空值的迭代器



如果我有一个构造对象,该对象有一个数组属性,并且我定义了Symbol。原型的迭代器指向Symbol。内部数组的迭代器,不知何故我没有得到相同的迭代器

这里有一个最小的例子:

const thing = function () {
this.internalArray = [1, 2, 3, 4, 5];
}
Object.defineProperty(thing.prototype, Symbol.iterator, {
get: function () { return this.internalArray[Symbol.iterator]; }
});
const test = new thing();
const a = test.internalArray[Symbol.iterator]();
const b = test[Symbol.iterator]();
console.log(a); // => Array Iterator {}
console.log(b); // => Array Iterator {}
console.log(a.next()); // => { value: 1, done: false }
console.log(b.next()); // => { value: undefined, done: true }

我不明白为什么会发生这种事。

当返回迭代器时,您需要将其绑定到this.internalArray数组实例,否则您所拥有的就是Array.prototype[Symbol.iterator],它不会迭代任何直接test对象上的

const thing = function () {
this.internalArray = [1, 2, 3, 4, 5];
}
Object.defineProperty(thing.prototype, Symbol.iterator, {
get: function () { return this.internalArray[Symbol.iterator].bind(this.internalArray); }
});
const test = new thing();
const b = test[Symbol.iterator]();
console.log(b); // => Array Iterator {}
console.log(b.next()); // => { value: undefined, done: true }

相关内容

  • 没有找到相关文章

最新更新