是否无法确定函数是否是生成器函数(如果已对.bind()进行了调用)?

柯克·欧梅特

似乎在任何生成器函数上调用.bind(this)都会破坏我查看该函数是否为生成器的能力。有想法该怎么解决这个吗?

var isGenerator = function(fn) {
    if(!fn) {
        return false;
    }

    var isGenerator = false;

    // Faster method first
    // Calling .bind(this) causes fn.constructor.name to be 'Function'
    if(fn.constructor.name === 'GeneratorFunction') {
        isGenerator = true;
    }
    // Slower method second
    // Calling .bind(this) causes this test to fail
    else if(/^function\s*\*/.test(fn.toString())) {
        isGenerator = true;
    }

    return isGenerator;
}

var myGenerator = function*() {
}

var myBoundGenerator = myGenerator.bind(this);

isGenerator(myBoundGenerator); // false, should be true
jfriend00

由于.bind()返回了一个新的(存根)函数,该函数仅调用原始函数.apply()以附加正确的this值,因此显然不再是生成器,而这就是问题的根源。

此节点模块中有一个解决方案:https : //www.npmjs.org/package/generator-bind

您可以按原样使用该模块,也可以查看它们如何解决(基本上,它们使.bind()返回的新函数也成为生成器)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否对JavaScript引擎尾部调用(TCO)进行了优化?

Node.js:异步函数中是否对尾部调用进行了优化?

尝试调用未绑定的fn,但我已对其进行了定义

内核是否进行了碎片整理

是否对克隆语句进行了优化?

始终调用组件是否在构造上进行了更新?

ML系列编译器是否对尾部调用进行了任何复杂的优化?

如何使用JavaScript检查是否对服务器进行了调用

如何知道在处理单个记录时是否进行了“包含”调用?

Polymer 1.0 Iron-Media-Query调用函数对查询进行了更改

测试是在R中的函数调用中使用默认参数还是对其进行了修改

是否在运行时对没有变量的C函数调用进行了预编译或评估?

仅保存如果进行了更改

确定是否对小标题进行了分组

如何确定Swift是否使用优化进行了编译

如何确定卫星是否进行了机动?

如果为RxJava主题进行了onComplete调用,我是否需要再次手动退订?

检测生成器函数是否为空,否则对其进行迭代

检查是否对numpy数组进行了排序

Ubuntu是否针对多核CPU进行了优化?

SoX 中的 noiseprof 是否对声音进行了平均测量?

检查用户是否对某项投票进行了投票

OpenCV是否在调试模式下进行了优化?

数组是否在 jOOQ 和 PostgreSQL 中进行了优化?

检查ConcurrentHashMap的computeIfAbsent是否进行了更改

如何知道jtextarea中是否进行了任何更改?

检查Git是否以编程方式进行了更改

以编程方式找出是否对Java类进行了修补?

验证是否在电话提示后进行了呼叫