【发布时间】:2015-01-02 09:02:12
【问题描述】:
看起来在任何生成器函数上调用 .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
【问题讨论】:
-
bind() 返回一个新函数。一个简单的函数,与过去无关
-
也许看看他们是怎么做的会很有趣:npmjs.org/package/generator-bind
-
@jfriend00 谢谢!那个包解决了我的问题
-
@Kirk - 我把我的评论变成了答案。
标签: javascript node.js generator ecmascript-harmony