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直接将这些参数放到一个数组中再传递, 最后借用方法的参数列表是一样的.

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

Js中apply与call的区别与用法

解析:apply与call是更改对象的内部指针,即改变对象的this指向的内容。 call与apply的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。...
  • wangji5850
  • wangji5850
  • 2016年03月17日 12:00
  • 1503

Javascript中call和apply的区别与详解

转自:http://www.7old.com/jiaocheng/show-1412.html 在js中call和apply它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区...
  • chelen_jak
  • chelen_jak
  • 2014年03月11日 16:12
  • 20237

JS中call、apply、bind大概区别

为什么需要这些?主要是因为this,来看看this干的好事。box.onclick = function(){   function fn(){     alert(this);   }   fn()...
  • lizeshi125
  • lizeshi125
  • 2016年12月15日 14:53
  • 2521

JavaScript中 apply/call 与面向对象语言中继承关系的联系和区别

apply是否可理解为类的继承?
  • sinat_27088253
  • sinat_27088253
  • 2016年10月24日 17:06
  • 615

apply, call, bind在js中的区别

apply, call, bind在js中的区别在js中,这三种方法都是用来改变函数的this对象的指向的。先看看相似点: 都是用来改变函数的this对象的指向的 第一个参数都是this要指向的对...
  • xiaobing_hope
  • xiaobing_hope
  • 2016年07月20日 21:35
  • 1328

Web前端面试指导(三十五):call() 和 apply() 的区别?

题目点评 本题属于比较一般性的问题,稍有接触的同学都是能够掌握的,先说清楚他们的相同点,方法的作用的,在把它们的差异讲清楚。  解题方法 相同点:两个方法产生的作用是完全一样的,都用来改变当前函数调用...
  • lxcao
  • lxcao
  • 2016年10月10日 15:18
  • 2161

JavaScript中bind、call、apply函数用法详解

在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手。前几天有人问我关于代码里 call() 函数的用法,我让他去看书,这里推荐用js 写服务...
  • chenleixing
  • chenleixing
  • 2015年03月14日 14:14
  • 6178

理解js中call,apply,caller,callee的区别

理解js中call,apply,caller,callee的区别 javascript中的call(),apply(),caller(),callee()方法作用都是调用某个函数或方法,概念...
  • huangchao1010
  • huangchao1010
  • 2016年11月08日 01:54
  • 1542

JS中的call()方法和apply()方法用法总结

JacvaScript中的call()方法和apply()方法, 1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。 2. 相同点:这两个方法的作用是一样的。都是在特定的...
  • ganyingxie123456
  • ganyingxie123456
  • 2017年04月27日 15:14
  • 11759

js中call,apply和bind方法的区别和使用场景

详解js中的call,apply和bind函数
  • yaojxing
  • yaojxing
  • 2017年05月14日 12:09
  • 1500
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript中apply()与call()的区别
举报原因:
原因补充:

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