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

主要用途:在特定的作用域中调用函数,实际上等于设置函数体内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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容