看起來像在任何生成器函數中調用.bind(this)會破壞我看看該函數是否爲生成器的能力。有想法該怎麼解決這個嗎?如果函數是一個生成器函數,如果已經調用了.bind()函數,是不可能的?
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()的返回一個新的功能。一個普通的函數,與過去沒有任何聯繫 – dandavis 2014-11-06 00:13:21
也許這將是有趣的,看他們是如何做到的:https://www.npmjs.org/package/generator-bind – jfriend00 2014-11-06 00:45:46
可能的重複[檢查函數是一個發生器](http://stackoverflow.com/questions/16754956/check-if-function-is-a-generator) – 2014-11-06 02:12:03