JavaScript中apply()与call()的区别

原创 2016年05月30日 10:32:39
apply()与call()的应用充分体现了JavaScript的动态变换运行时上下文特征,call,apply两个方法的示例如下:
foo.call(this,arg1,arg2,arg3)==foo.apply(this,arguments)==this.foo(arg1,arg2,arg3)

参数:this是方法执行时上下文相关对象,arg1,arg2,arg3是传给foo方法的参数。所谓的方法执行时上下文对象,就是在类实例化后对象中的this.

  • 相同点:call()方法与apply()方法都属于Function.Prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.Prototype,所以每个Function对象实例额,也就是每个方法都有call,apply属性,既然作为方法的属性,那它们的使用就当然是针对方法的。
    不同点:方法的传递的第二个参数不同。

    在JavaSript中,代码总是有一个上下文对象,代码处理该对象之内。上下文对象是通过this变量来体现的,这个this对象永远指向当前代码所处的对象中。
    应用实例:

    var b=new B();
    b.setMessage.call(a,"a的消息");
    alert(a.getMessage);//a的消息
注意:a本身并没有这个方法
    b.setMessage.call(a,"a的消息");就等于在a作执行时的上下文对象调用b对象的setMessage,而且这个过程和b一点关系也没有。
    call,apply作用就是借用别人的方法来调用,就像调用自己的一样。
    相异之处示例:
function print(a,b,c,d)
        {
        alert(a+b+c+d);
        }
        function example(a,b,c,d)
        {
            print.call(this,a,b,c,d);
            print.apply(this,argumrnts);
            print.apply(this,[a,b,c,d])
    }
    example("bei","guang","jiao","bei");
在example方法中的上下文对象this是指window对象。所以,call,apply方法除了第一个参数——执行时上下文对象相同外,call方法的其他参数将依次传递给借用的方法作参数,而apply,第二个参数为一个数组传递。

call, apply方法区别是,从第二个参数起, call方法参数将依次传递给借用的方法作参数,
而apply直接将这些参数放到一个数组中再传递, 最后借用方法的参数列表是一样的.

版权声明:本文为博主原创文章,未经博主允许不得转载。

深入理解JavaScript中的call、apply、bind方法的区别

转载自:http://www.jb51.net/article/85367.htm 在JavaScript 中,this的指向是动态变化的,很可能在写程序的过程中,无意中破坏掉thi...

关于JavaScript中apply与call的用法意义及区别

JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别。 先来看看JS手册中对call的解释: call 方法 调用一个对象的一个方法,以另一个对象替换当...

关于JavaScript中apply与call的用法意义及区别

JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别。 先来看看JS手册中对call的解释:                 ...

javascript中apply和call区别

一、区别obj.call(thisObj, arg1, arg2, ...); obj.apply(thisObj, [arg1, arg2, ...]);两者作用一致,都是把obj(即this)绑定...
  • cddcj
  • cddcj
  • 2017年04月12日 12:00
  • 317

JavaScript中apply(),call()的区别和关系

如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语...
  • remy303
  • remy303
  • 2011年05月09日 15:48
  • 363

JavaScript基础 (十二) ---- call apply bind的区别

1. call apply bind的作用 —- 用来改变函数中this的指向2. call 的使用方法call()中第一个参数:用来改变this指向 call()中从第二个参数开始,相当于给ca...

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

如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语...
  • vajoy
  • vajoy
  • 2012年02月27日 23:39
  • 414

javascript中apply()和call()方法的关系与区别

下面,就可以区分apply和call之间的关系: Fuc.call(this,a1,a2,a3) == Fuc.apply(this,arguments) == this.Fuc(a1,a2...

关于javascript中apply()和call()方法的区别

如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语...

javascript 中 call() 和 apply() 的区别

在 ECMAScript 核心所定义的全部属性中,最耐人寻味的就要数 prototype 属性了。对于ECMAScript 中的引用类型而言, prototype 是保存引用类型所有实例方法的真正所在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript中apply()与call()的区别
举报原因:
原因补充:

(最多只允许输入30个字)