标签:
function foo(arg1, arg2, arg3){
alert(art1 + arg2 + arg3);
}
foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3)
call , apply 都属于 Function.prototype的一个方法, 它是JavaScript引擎内在实现的, 因为属于 Function.prototype
所以每个Function对象实例,也就是每个方法都有call , apply 属性.
两个方法容易混淆,因为它们作用一样,只是使用方式不一样.
相同点: 两个方法的作用完全一样
不同点:方法传递的方式不一样.
对于foo.call(this, arg1, arg2, arg3)
foo是一个方法,this是方法执行时上下文相关对象,arg1, arg2, arg3是传给foo方法的参数.这里所谓的方法执行时上下文相关对象, 如果有面向对象的编程基础,那很好理解,就是在类实例化后对象中的this.
在JavaScript中,代码总是有一个上下文对象,代码处理该对象之内. 上下文对象是通过this变量来体现的, 这个this变量永远指向当前代码所处的对象中.
下面一个例子,理解!
<script type="text/javascript"> function print(arg1,arg2,arg3){ alert(arg1 + ‘ - ‘+arg2+‘ - ‘ + arg3) } function example(a, b, c ){ //call 方式 print.call(this,a,b,c); //apply 方式,参数作为数组传递, 可以直接使用JavaScript方法内本身有的arguments数组 print.apply(this,arguments); //封装成数组 print.apply(this,[a,b,c]); } </script> <input type="button" value="test" onclick="example(‘wang‘,‘ting‘,‘tttt‘)" />
弹出了3次
标签:
原文地址:http://my.oschina.net/wangt10/blog/517195