在 JavaScript 中,我们可以通过两种方式调用函数:
function f(message) { ... }
f.call(this, "test");
要不就:
f("test")
除了我们可以在第一种情况下指定范围之外,使用这种语法是否有其他优势?
在 JavaScript 中,我们可以通过两种方式调用函数:
function f(message) { ... }
f.call(this, "test");
要不就:
f("test")
除了我们可以在第一种情况下指定范围之外,使用这种语法是否有其他优势?
您可以根据需要/需要传递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
.
读:
除了我们可以在第一种情况下指定范围
您不能“指定范围”。范围由代码的编写方式设置,除了使用with
. 函数的this
关键字与作用域无关,它总是在当前执行上下文中解析为局部变量。
您还可以将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!