我很感兴趣在 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
当您想要控制将在被调用函数中使用的范围时使用。您可能希望 this
关键字是您分配给函数的范围之外的其他内容,在这些情况下,您可以使用 call
或 apply
来使用您自己的范围调用该函数。
F.ex,它还允许您在作用域外调用实用方法,例如使用“私有(private)”函数时:
var obj = (function() {
var privateFn = function() {
alert(this.id);
}
return {
id: 123,
publicFn: function() {
privateFn.call(this);
}
};
}());
obj.publicFn();
在上面的示例中,privateFn
没有暴露在 obj
中,但它仍然可以被构造为公共(public)范围的一部分(使用 this
同理)。
关于javascript - 使用 JS .call() 方法的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9001830/