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

调用生成器函数返回的对象,如何获取其方法?

如何获取生成器对象的方法?

嘿,这个问题我之前也纠结过!咱们先搞明白为啥Object.getOwnPropertyNames(generator())会返回空数组——因为生成器实例的所有方法(比如next、return、throw)都不在对象自身上,而是在它的原型链里。Object.getOwnPropertyNames()只会查找对象自己的可枚举和不可枚举属性,不会去遍历原型链,所以直接调用在生成器实例上自然拿不到东西。

那该怎么获取这些方法呢?其实很简单,先拿到生成器实例的原型对象,再去原型上取属性就行:

function* generator() { yield 'value' }
const genInstance = generator();

// 第一步:获取生成器实例的原型
const generatorProto = Object.getPrototypeOf(genInstance);

// 第二步:获取原型上的所有自有属性名(包括方法)
console.log(Object.getOwnPropertyNames(generatorProto));
// 输出结果: ["constructor", "next", "return", "throw"]

如果只想筛选出方法(排除constructor),可以加个过滤:

const genMethods = Object.getOwnPropertyNames(generatorProto)
  .filter(name => typeof generatorProto[name] === 'function');

console.log(genMethods);
// 输出结果: ["next", "return", "throw"]

另外补充个小知识点:生成器对象的原型是Generator.prototype,而这个原型又继承自Iterator.prototype,不过咱们常用的方法都直接在Generator.prototype上啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:00:19