JavaScript中apply()、call()和bind()的相似与区别

JavaScript中每个函数都包含两个非继承而来的方法,分别是apply()和call()。这两个方法都是用来在特定的作用域中调用函数,即改变函数体内this对象的值。

apply()方法接受两个参数:1、在其中运行函数的作用域2、参数数组。call()方法与apply()方法的作用是相同的,区别仅在于接受参数的方式不同。对于call()方法,第一个参数是相同的,而第二个参数是直接传递给函数的。例如:

function add(num1,num2){
  return num1+num2;
}
function applyAdd(num1,num2){
return add.apply(this,[num1,num2]); //传入参数数组
}

function callAdd(num1,num2){
return add.call(this,num1,num2); //传入参数值
}
alert(applyAdd(10,10));
alert(callAdd(10,10));

实际上,call()和apply()的作用不仅仅是传递参数,它们的强大之处在于扩充函数赖以运行的作用域,好处是对象不需要和方法有任何的耦合关系。例如:

window.size="big";
var a={size:"small"};
function saySize(){
	alert(this.size);
}
saySize();              //big
saySize.apply(this);      //big
saySize.call(window);    //big
saySize.call(a);         //small
saySize.bind(a)();       //small

上面我们用到了bind()方法,这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。从这里。我们可以看出bind()与以上两个方法的区别,call()和apply()是对函数的直接调用,而bind()方法返回的是一个函数,因此后面还需要()来进行调用才可以使用。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章