call()函数、apply()函数区别与意义

使用apply函数或call函数的意义:

  在面对对象编程过程中,当A对象调用其他对象而非A对象方法是,该方法中所有的this引用都指向此方法所在的对象,而不是当前代码的上下文即A对象,

为了保持this的原来的指向(即A对象),则需要使用apply或call函数。

apply()和call()的区别:

apply和call,它们的作用都是将函数绑定到另外一个对象上去运行

原型分别是

Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg,[arg1],[arg2…]]);

从中可以看出,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,使得另外一个对象实例传入函数。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

而区别就在于第二个参数,apply()函数使用数组形式传入数值,call()函数以自由形式直接传入多个数值。

示例:

function Accomodation(){

  this.isAlarmed=false;

}

var AlarmSystem={

  arm:function(message){

  this.isAlarmed=true;

alert(message);

  },
disarm:function(message){
this.isAlarmed=false;
alert(message);
}

};

var myHouse = new Accomodation();

AlarmSystem.arm.call(myHouse,"Alarm activated");

alert(myHouse.isAlarmed);      //true      arm()函数中的this值通过call()指向myHouse对象,使myHouse对象的属性发生改变

AlarmSystem.disarm.apply(myHouse,["Alarm activated"]);

alert(myHouse.isAlarmed);     //flase       arm()函数中的this值通过call()指向myHouse对象,使myHouse对象的属性发生改变

时间: 2024-12-23 00:08:35

call()函数、apply()函数区别与意义的相关文章

R语言中apply函数

前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是为什么呢?原因在于R的循环操作for和while,都是基于R语言本身来实现的,而向量操作是基于底层的C语言函数实现的,从性能上来看,就会有比较明显的差距了.那么如何使用C的函数来实现向量计算呢,就是要用到apply的家族函数,包括apply, sapply, tapply, mapply, lapply, rapply, vapply, eapply等. 目录

apply() 函数家族介绍

apply() 函数算是R语言中很基础的一个函数,同时还有 sapply()  lapply()  tapply() 函数精简了 apply() 函数的用法. apply() 函数是一个很R语言的函数,可以起到很好的替代冗余的for循环的作用,R语言中的循环操作for和while都是基于R语言本身来实现的,而向量操作是基于底层的C语言函数实现的,所以使用apply()函数家族进行向量计算时高性价比的. apply() 函数可以面向数据框.列表.向量等,同时任何函数都可以传递给 apply() 函

JavaScript中的bind,call和apply函数的用法和区别

一直没怎么使用过JavaScript中的bind,call和apply, 今天看到一篇比较好的文章,觉得讲的比较透彻,所以记录和总结如下 首先要理解的第一个概念,JavaScript中函数调用的方式,总结下来,有以下4种 1. 方法调用 2. 正常函数调用 3. 构造器函数调用 4. apply/call 调用 要明白的第2个概念, JavaScript 中的函数,无论是上面哪种函数调用方式,除了你函数声明时定义的形参外,还会自动给函数添加两个形参,分别是this 和 arguments 要明白

pandas中agg()函数和apply()函数的区别

如果对自定义top_n的调用采用agg函数的话,那么报出的错误将是 说明了一个问题,使用agg函数调用top_n的话,它在尝试对每一个分组使用top_n进行聚合,但是top_n的作用是排序,不是聚合,所以肯定会报错 所以在这种情况下,只能采用apply函数,而不能采用agg函数,agg函数内调用的函数只能对分组进行聚合使用. 新手入门,个人理解,如有错误,希望谅解

关于call和apply函数的区别及用法

call和apply函数是function函数的基本属性,都可以用于更改函数对象和传递参数,是前端工程师常用的函数.具体使用方法请参考以下案列: 例如: 申明函数: var fn = function (msg, isalert) { if (isalert) alert(this + msg); }; 用法: call: fn.call(/*context,arg1,arg2,...*/); apply:fn.call(/*context,[arg1,arg2,...]*/); 讲述:第一个参

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

在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手.前几天有人问我关于代码里 call() 函数的用法,我让他去看书,这里推荐用js 写服务器的程序猿看<javascript编程精粹> 这本书,crockford大神果然不是盖的.之后我在segmentfault上又看到了类似的问题,那边解答之后干脆这里记一笔. 首先,关于 js 定义类或对象的方法,请参看w3school 的这里的这里,写的非常详细和清晰,我不再赘言了. 为了介绍 b

Javascript中bind、call、apply函数用法

js 里函数调用有 4 种模式:方法调用.正常函数调用.构造器函数调用.apply/call 调用. 同时,无论哪种函数调用除了你声明时定义的形参外,还会自动添加 2 个形参,分别是 this 和arguments. arguments 不涉及到上述 3 个函数,所以这里只谈 this.this 的值,在上面 4 中调用模式下,分别会绑定不同的值.分别来说一说: 方法调用: 这个很好理解,函数是一个对象的属性,比如 var a = { v : 0, f : function(xx) { this

js中bind、call、apply函数的用法

最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但真正大规模的使用 js 这还是第一次.我也是初生牛犊不怕虎,这次服务器居然抛弃 C++ 和 lua 的正统搭配,而尝试用 nodejs 来写游戏服务器,折腾的自己要死要活的我也是醉了. 在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手.

bind、call、apply函数的用法

js 里函数调用有 4 种模式:方法调用.正常函数调用.构造器函数调用.apply/call 调用.同时,无论哪种函数调用除了你声明时定义的形参外,还会自动添加 2 个形参,分别是 this 和arguments.arguments 不涉及到上述 3 个函数,所以这里只谈 this.this 的值,在上面 4 中调用模式下,分别会绑定不同的值.分别来说一说:方法调用:这个很好理解,函数是一个对象的属性,比如 var a = { v : 0, f : function(xx) { this.v =