JavaScript中apply()、call()和bind()的相似与区别
2017-08-20 14:27
483 查看
JavaScript中每个函数都包含两个非继承而来的方法,分别是apply()和call()。这两个方法都是用来在特定的作用域中调用函数,即改变函数体内this对象的值。
apply()方法接受两个参数:1、在其中运行函数的作用域2、参数数组。call()方法与apply()方法的作用是相同的,区别仅在于接受参数的方式不同。对于call()方法,第一个参数是相同的,而第二个参数是直接传递给函数的。例如:
实际上,call()和apply()的作用不仅仅是传递参数,它们的强大之处在于扩充函数赖以运行的作用域,好处是对象不需要和方法有任何的耦合关系。例如:
上面我们用到了bind()方法,这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。从这里。我们可以看出bind()与以上两个方法的区别,call()和apply()是对函数的直接调用,而bind()方法返回的是一个函数,因此后面还需要()来进行调用才可以使用。
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()方法返回的是一个函数,因此后面还需要()来进行调用才可以使用。
相关文章推荐
- javascript -- apply/call/bind的区别
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- javascript中apply、call和bind的使用区别
- javascript中apply、call和bind的区别
- javascript中apply、call和bind的区别
- javascript中apply、call和bind的区别
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- javascript中apply、call和bind的区别
- JavaScript中apply、call和bind的区别
- JavaScript基础 (十二) ---- call apply bind的区别
- javascript中apply、call和bind的使用区别
- javascript中apply、call和bind的区别
- javascript中apply、call和bind的区别
- javascript中apply、call和bind的区别
- javascript中call、apply、bind区别
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- Javascript中apply、call、bind的使用和区别
- javascript中apply、call和bind的区别
- 深入理解JavaScript中的call、apply、bind方法的区别