【发布时间】:2012-02-18 14:02:21
【问题描述】:
我对 JS 中有 call() 方法的原因很感兴趣。它似乎重复了调用this 的常用方法。
例如,我有一个带有 call() 的代码。
var obj = {
objType: "Dog"
}
f = function(did_what, what) {
alert(this.objType + " " + did_what + " " + what);
}
f.call(obj, "ate", "food");
输出是“狗吃了食物”。但同样的结果,我可以将函数分配给对象。
var obj = {
objType: "Dog"
}
f = function(did_what, what) {
alert(this.objType + " " + did_what + " " + what);
}
obj.a = f;
obj.a("ate", "food");
结果是一样的。但是这种方式更容易理解,使用起来更方便。为什么需要 call()?
【问题讨论】:
-
好吧,您不能在所有情况下都将函数分配给对象。例如。如果您创建一个接受回调的函数并且还允许传递上下文,您可以将回调分配给对象并直接调用它,但您会选择哪个名称?您可能会覆盖现有方法。
call提供了一种解决该问题的简单方法。
标签: javascript function methods this