call()与apply()的区别与作用

Posted 月疯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了call()与apply()的区别与作用相关的知识,希望对你有一定的参考价值。

1、概念

call,apply都属于Function.prototype的一个方法,它是javascript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。

2、作用:

call()方法和apply()方法的作用相同:改变this指向

3、他们的区别在于接收参数的方式不同:

call():第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。在使用call()方法时,传递给函数的参数必须逐个列举出来。

apply():传递给函数的是参数数组

<script type="text/javascript">
    function A(){
        this.flag = 'A';
        this.tip = function(){
            alert(this.flag);
        };
    }
    function B(){
        this.flag = 'B';
    }
    var a = new A();
    var b = new B();
    //a.tip.call(b);
    a.tip.apply(b);
</script>

4、代码解释

(1)实例代码定义了两个函数A和B,A中包含flag属性和tip属性(这个属性赋值一个函数),B中有一个flag属性。

(2)分别创建A和B的对象a和b。

(3)无论是a.tip.call(b);和a.tip.apply(b);运行的结果都是弹出B。

(4)从结果中可以看出call和apply都可以让B对象调用A对象的tip方法,并且修改了this的当前作用对象。

以上是关于call()与apply()的区别与作用的主要内容,如果未能解决你的问题,请参考以下文章

apply()与call()的区别

js中的apply与call的用法与区别

Javascript中call和apply的区别与详解

Javascript中call和apply的区别与详解

call() apply() bind()方法的作用和区别!

js/javascript : apply,call,bind三者的使用与区别