JavaScript:函数的两个非继承来的方法apply()、call(),以及ES5的bind()

这call()、apply()两个方法作用是相同的,都是用来改变将要调用的函数的作用域。它们的区别在于接受参数的方式。
而bing()的作用是绑定作用域。

  • apply()
    接受两个参数。第一个参数是:作用域;第二个参数是:传入一个Array,元素是将调用的函数的参数,也可以直接传arguments对象[可选]
function sum(num1, num2){
    return num1 + num2;
}
function callSum(num1, num2){
return sum.apply(this, [num1, num2]);
//or
//return sum.apply(this, arguments);
}
  • call()
    和apply不同的是第二个参数开始,他不是传入一个Array,而是将参数逐个列出,即call的参数是不定的。
function callSum(num1, num2){
    return sum.call(this, num1, num2);
}

PS:上面连个例子传入的作用域都是this,而这两个callSum函数都是在全局作用域下调用,即this对象引用的是window

window.color = "red";
var obj = { color: "blue" };
function sayColor(){
    console.log(this.color);
}

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

上面例子也看出call()和apply()方法最大的用还是,改变函数赖以运行的作用域

  • bind()
var temp = sayColor.bind(obj);
temp();  //blue

要注意的是:支持bind()方法的浏览器有,IE9+、Firefox4+、Safari5.1+、Opera12+、Chrome

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容