我注意到 javascript 中有一个奇怪的事情。考虑以下几点:
var fn = ''.toUpperCase.call
console.log(typeof fn); // "function"
fn(); // Uncaught TypeError: `fn` is not a function
上面的代码是在我的 Chrome 开发者控制台上执行的。版本是43.0.2357.81 m
.
The typeof
运算符清楚地表明fn
是一个函数,但错误表明并非如此。
我注意到了Function.apply
至少显示一些有意义的错误消息。
那么,什么时候是函数,而不是函数呢?
Javascript 中的上下文总是由你的方式建立的call一个函数。
var fn = ''.toUpperCase.call
这指定了原型实现call
功能为fn
。如果你现在打电话fn()
,调用没有上下文。call
将尝试调用与其关联的函数对象。然而,该上下文是在调用时建立的。由于您在调用时没有为其提供任何上下文,因此某些内部组件call
正在抛出一个错误。
你必须这样做:
fn.call(''.toUpperCase)
没错,你call
the call
函数,建立上下文,即toUpperCase
字符串函数。在这种特定情况下,这会导致内部出现另一个错误toUpperCase
, since it不受特定上下文的约束。您还需要明确建立该上下文:
var fn = ''.toUpperCase.call
fn.call(''.toUpperCase.bind(''))
另请参阅“this”关键字如何工作? https://stackoverflow.com/q/3127429/476
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)