调用生成器函数返回的对象,如何获取其方法?
如何获取生成器对象的方法?
嘿,这个问题我之前也纠结过!咱们先搞明白为啥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
相关产品推荐
相关产品推荐

