码迷,mamicode.com
首页 > 移动开发 > 详细

javascript 中 call apply 方法的区别

时间:2015-10-14 18:13:53      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

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次

技术分享




javascript 中 call apply 方法的区别

标签:

原文地址:http://my.oschina.net/wangt10/blog/517195

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!