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

来源:互联网 发布:mac怎么恢复废纸篓 编辑:程序博客网 时间:2024/06/04 17:41

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();              //bigsaySize.apply(this);      //bigsaySize.call(window);    //bigsaySize.call(a);         //smallsaySize.bind(a)();       //small

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





原创粉丝点击