我正在努力弄清楚为什么跟随不起作用:
> var foo = Array.prototype.forEach.call;
< undefined
> typeof foo;
< "function"
> foo([1, 2, 3], function (y) {console.log(y);});
< Uncaught TypeError: foo is not a function
at <anonymous>:2:1
at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)
虽然替代方法运作得很好:
var foo = Array.prototype.forEach;
foo.call([1, 2, 3], function (y) {console.log(y);});
我会很感激任何提示。
答案 0 :(得分:2)
fn.call
总是需要一个上下文来配合它。您无法将其分配给变量,因为您在不包含任何上下文的情况下引用Function.prototype.call
。请记住,Function.prototype.call()
不是装饰器,而是函数的属性,可帮助您处理正确的上下文执行。当你打破参考时,你已经消除了它的目的。
var foo = Array.prototype.forEach.call;
foo === Function.prototype.call //true
Array.prototype.forEach.call === Array.prototype.filter.call //true
Array.prototype.forEach.call === Object.prototype.hasOwnProperty.call //true