调用函数的方法
考虑一下这个简单的函数:
function my(p) { console.log(p) }我可以这样称呼它:
my("Hello");也是这样:
my.call(this, "Hello");此外,这是有可能的:
Function.prototype.call.call(my, this, "Hello");功能方式的简写
我对最后一种选择感兴趣--这是最有效的选择,但由于时间太长,我试着做一个速记:
var call = Function.prototype.call.call;为了这样称呼我:
call(my, this, "Hello");但我得到了这个TypeError:
TypeError: Function.prototype.call called on incompatible undefined有人知道吗,这里怎么了?
发布于 2015-06-17 10:49:13
当你说
var call = Function.prototype.call.call;最后一个call失去了它的实际上下文。您需要明确地说call属于Function.prototype.call。
您可以这样做,方法是创建一个新函数,它实际上像这样绑定它
var call = Function.prototype.call.call.bind(Function.prototype.call);
call(my, this, "Hello");
// Hellobind函数返回一个新函数,该函数在调用时将上下文(this)设置为Function.prototype.call。
发布于 2015-06-17 10:49:27
据推测,call在内部使用this。
通过在没有上下文的情况下调用它,您已经将this的内部值从可以访问函数原型的东西更改为window。
发布于 2015-06-17 10:49:11
如果您想这样做,那么请考虑这一点(如果您有一个符合ES5的解释器):
var call = Function.prototype.call.bind(Function.prototype.call)绑定函数确保进行函数调用时的上下文( this变量)是Function.prototype.call而不是undefined,就像在您的例子中看到的那样。
https://stackoverflow.com/questions/30889321
复制相似问题