美文网首页
函数的apply()、call()、bind()方法

函数的apply()、call()、bind()方法

作者: 咸鱼不闲吧 | 来源:发表于2021-02-21 21:21 被阅读0次

主要用途:在特定的作用域中调用函数,实际上等于设置函数体内this对象的值,扩充函数赖以运行的作用域。
最大的好处:对象不需要与方法有任何耦合关系。

apply()用法

接收2个参数:一个是在其中运行函数的作用域,另一个是参数数组(可以是Array的实例,也可以是arguments对象)。

function sum(num1, num2) {
    return num1 + num2;
}

function applySum1(num1, num2) {
    return sum.apply(this, arguments);    // 传入argumenmts对象
}

function applySum2(num1, num2) {
    return sum.apply(this, [num1, num2]);    // 传入数组
}

alert(applySum1(10,10));    // 20
alert(applySum2(10,10));    // 20

call()用法

接收一个或多个参数:第一个参数是this值,其余传递给函数的参数逐个列举出来。

function sum(num1, num2) {
    return num1 + num2;
}

function callSum(num1, num2) {
    return sum.call(this, num1, num2);
}

alert(callSum(10,10));    // 20

如何选择?

取决于采取哪种传参更方便(在不给函数传参的情况下,两种方法选哪个都无所谓)。

真正强大的功能:扩充函数赖以运行的作用域

window.color = "red";
var o = { color: "blue" };

function sayColor() {
    alert(this.color);
}

sayColor();

sayColor.call(this);    // red
sayColor.call(window);    // red
sayColor.call(o);    // blue

bind()用法

机制:会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。

window.color = "red";
var o = { color: "blue" };

function sayColor() {
    alert(this.color); 
}
var objectSayColor = sayColor.bind(o);
objectSayColor();    // blue

相关文章

网友评论

      本文标题:函数的apply()、call()、bind()方法

      本文链接:https://www.haomeiwen.com/subject/sdfcfltx.html