0

在 JavaScript 中,我们可以通过两种方式调用函数:

function f(message) { ... }
f.call(this, "test");

要不就:

f("test")

除了我们可以在第一种情况下指定范围之外,使用这种语法是否有其他优势?

4

3 回答 3

4

您可以根据需要/需要传递this对象。例如

[].slice.call("abcdef", 2) === ['c', 'd', 'e', 'f'];

或者

var x = {hasOwnProperty:function() { return false; }, key:42};
x.hasOwnProperty('key'); // == false
{}.hasOwnProperty.call(x, 'key'); // true

您应该注意这call不是关键字,而是Function.prototype.

读:

于 2013-03-24T22:30:15.127 回答
3

除了我们可以在第一种情况下指定范围

您不能“指定范围”。范围由代码的编写方式设置,除了使用with. 函数的this关键字与作用域无关,它总是在当前执行上下文中解析为局部变量。

于 2013-03-24T22:42:35.110 回答
1

您还可以将call(and apply) 用于部分 函数 应用程序,即创建一个函数,该函数使用一些预设参数调用另一个函数。例如:

// Basic add function
function add(a, b) {
    return a + b;
}

// Function to create new adders with a preset 'a' argument
function createAdder(a) {
    return function(b) {
        return add.call(null, a, b);
    }
}

// Let's create a function that always adds five to what's passed in
var addFive = createAdder(5);

// Now let's test it
addFive(6); // 11 - it works!
于 2013-03-25T00:51:22.113 回答