• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

javascript 中 call方法 和 apply 方法 的区别

web开发 wangting 2年前 (2017-07-25) 367次浏览

javascript 中 call方法 和  apply 方法 的区别

function foo(arg1, arg2, arg3){

alert(art1 + arg2 + arg3);

}

[mark]foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3)[/mark]

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次.


喜欢 (0)