如果我有一个构造对象,该对象有一个数组属性,并且我定义了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 }