我尝试过滤生成器,并期望这种通用功能必须在 JavaScript 中的任何位置定义,因为它是为数组定义的,但我找不到它。所以我试图定义它。但我无法扩展内置发电机。
我有一个示例生成器
function make_nums ()
{
let nums = {};
nums[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
return nums;
}
生成一些数字。
[...make_nums()] // => Array [ 1, 2, 3 ]
如果我构建一个数组,我可以使用以下方法过滤数组filter
数组的函数。
[...make_nums()].filter(n => n > 1) // => Array [ 2, 3 ]
但我不想建立一个数组。相反,我想使用旧的生成器并构建一个新的过滤生成器。为此我编写了以下函数。
function filtered (generator, filter)
{
let g = {};
g[Symbol.iterator] = function* () {
for (let value of generator)
if (filter(value))
yield value;
};
return g;
}
可以用来做我想做的事。
[...filtered (make_nums(), n => n > 1)] // => Array [ 2, 3 ]
但这是一个非常通用的函数,可以以与filter
函数可以应用于每个Array
。所以我尝试总体上扩展生成器,但我不明白如何扩展。
MDN 文档发电机 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator以某种方式表明Generator.prototype
可能存在,但又好像不存在。当我尝试定义某些东西时Generator.prototype
,我收到错误
ReferenceError:生成器未定义
如何扩展内置Generator
class?