javascript - 使用 JS .call() 方法的原因?

标签 javascript function methods this

我很感兴趣在 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 关键字是您分配给函数的范围之外的其他内容,在这些情况下,您可以使用 callapply 来使用您自己的范围调用该函数。

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/

相关文章:

javascript - jQuery 添加/删除文本框

javascript - Jquery UI resize 和 draggable 不能一起工作?

javascript - 如何读取和调试压缩的javascript文件?

c - 指向函数错误的指针

在 PHP 内部调用时,Javascript 函数没有响应。 (试图将项目添加到选项列表框)

ruby-on-rails - Ruby on Rails 中的 Pets#edit 中没有方法错误

Javascript OOP,一个不会运行的简单计算器

javascript - this.props 适用于一个函数,不适用于另一个 React-Redux

bash - 当函数包含其他回显时,从 bash 函数返回字符串的最安全方法(<4.3)

android - 找不到符号方法getLayoutInflater。