You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义原型Symbol.iterator指向内部数组迭代器返回空结果问题

问题原因
  • 核心是数组迭代器方法的this指向不符合预期:数组内置的Symbol.iterator方法执行时,依赖this指向要遍历的数组实例,从而读取数组的length和索引元素。
  • 你的写法中,getter直接返回了internalArray的Symbol.iterator方法本身,当你执行test[Symbol.iterator]()时,该方法的this会被绑定到test实例,而非内部的internalArray。迭代器读取test实例的length时得到undefined(会被转为0),因此直接返回结束状态。
修复方案

方案1:绑定迭代器方法的this指向

在getter返回方法时,将this绑定到内部数组即可:

Object.defineProperty(thing.prototype, Symbol.iterator, {
  get: function () { 
    return this.internalArray[Symbol.iterator].bind(this.internalArray); 
  }
});

方案2:包装一层函数调用内部数组迭代器

直接返回一个新函数,函数内部调用内部数组的迭代器,利用箭头函数保留getter的this指向:

Object.defineProperty(thing.prototype, Symbol.iterator, {
  get: function () { 
    return () => this.internalArray[Symbol.iterator]();
  }
});

内容的提问来源于stack exchange,提问作者Arii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:24:04