简明易懂的call apply

在iteye看到一篇对call解释得相当简明易懂,觉得得宣传一下 : http://uule.iteye.com/blog/1158829

一、方法的定义 

call方法: 
语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 
定义:调用一个对象的一个方法,以另一个对象替换当前对象。 
说明: 
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 

apply方法: 
语法:apply([thisObj[,argArray]]) 
定义:应用某一对象的一个方法,用另一个对象替换当前对象。 
说明: 
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。 

2、常用实例

a例

function add(a,b)
{alert(a+b);
}
function sub(a,b)
{alert(a-b);
}add.call(sub,3,1); 

这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

b例

function Animal(){  this.name = "Animal";  this.showName = function(){  alert(this.name);  }  
}  function Cat(){  this.name = "Cat";  
}  var animal = new Animal();  
var cat = new Cat();  //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。  
//输入结果为"Cat"  
animal.showName.call(cat,",");  
//animal.showName.apply(cat,[]);

call 的意思是把 animal 的方法放到cat上执行,原来cat是没有showName() 方法,现在是把animal 的showName()方法放到 cat上来执行,所以this.name 应该是 Cat

c、实现继承

 function Animal(name){    this.name = name;    this.showName = function(){    alert(this.name);    }    }    function Cat(name){  Animal.call(this, name);  }    var cat = new Cat("Black Cat");   cat.showName();

d、多重继承

function Class10()
{this.showSub = function(a,b){alert(a-b);}
}function Class11()
{this.showAdd = function(a,b){alert(a+b);}
}function Class2()
{Class10.call(this);Class11.call(this);
}

 很简单,使用两个 call 就实现多重继承了
当然,js的继承还有其他方法,例如使用原型链,这个不属于本文的范畴,只是在此说明call 的用法。说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments
还有 callee,caller..

例子来源:http://xiaofeizm55333.iteye.com/blog/80913

http://www.iteye.com/topic/599108   及回复..

转载于:https://www.cnblogs.com/mofish/p/3507861.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络有哪些技能知识,网络基础知识及操作技能.ppt

网络基础知识及操作技能 主讲人 李春报 一、计算机网络概述 1、计算机网络的概念 计算机网络是把分布在不同地理位置上的计算机、终端,用通信设备和通信线路连结起来,再配以相应的网络软件,从而使众多计算机可以方便地互相传递信息&#xff0…

这些快捷键要学会使用啊

史上最全苹果键盘及Xcode快捷键整理 它们分别是command、option、control、shift以及esc除了command键上有标志之外其余四个可以通过这四个键对比比较出来。 谢谢原文作者提供较详细的快捷键说明。 常用的Xcode快捷键,工欲善其事,必先利其器。mac的键盘和…

目前计算机应用最广泛的区域是,自考《计算机应用基础》试题练习(一)

以下是关于2019年4月上海自考《计算机应用基础》串讲复习,由上海自考通整理发布,希望对即将参加自考的考生们能有帮助,更多的复习资料可点击查看历年真题。第一章一、选择1. 世界第一台电子计算机生产日期是( A )。A. 1946 B. 1945 C. 1947 D…

CSS元素选择器

1、在css元素选择器中飞,最重要的是HTML页面中的元素的定位; p { color: red; } h1{ color:blue; font-family:sans-serif; } 2、css选择器分组: 将 h2 和 p 选择器放在规则左边,然后用逗号分隔,就定义了一个规则。其右边的样式&a…

计算机基础知识二进制转换,计算机基础知识数制转换

二、数制转换1.十进制数到二进制数的转换(1)、整数部分 除2取余法(余数为0为止),最后将所取余数按逆序排列。实例:将十进制数23转换为二进制数2| 232| 11 余数 12| 5 余数 12| 2余数 12|1 余数 00 余数 1结果为 (23)10 (10111)2(2)、小数部分 乘2取整法…

iOS基础 - 控制器

一、当两个控制器互为父子关系的时候,它们的view一般也是互为父子关系 比如想添加A控制器的view到B控制器的view上,就应该让A控制器成为B控制器的子控制器,而B控制器就称为A控制器的父控制器 //[B addChildViewController:A]; // A就会存在于…

计算机专业英语第07章,计算机专业英语电子教案第07章.ppt

计算机专业英语电子教案第07章Computer English Chapter 7 Programming Languages 复杂定语(从句)的翻译技巧之二 四、句子结构调整法 有时,原文句中一个中心词带有若干修饰成分,但它们既不是纯“并列”头系,也不是规则的“连环”关系&#x…

关机计算机专业,电脑关机后自动重启怎么回事

日常生活中,大部分的网友朋友们都碰到过电脑在正常使用时,突然电脑自动重启了,并且多次尝试强制关机都无效,令人费神。下面小编针对此问题的原因给出了几种方法,希望对大家有所帮助,快来看看吧!…

PHP验证码常用的函数记录

1、绘制真彩画布,返回资源类型的图像标识符 resource imagecreatetruecolor ( int $width , int $height ) 例:$image imagecreatetruecolor( 30, 20 ); 2、为创建的画布分配背景颜色,参数中的颜色(分别是红绿蓝)&…

计算机无法打开打印机ip端口,讲述Win10电脑上无法选择打印机端口的解决方法...

我们在Win10电脑上使用打印机,进行打印材料是很平常的一件事,但是有用户在Win10电脑上,操作打印机时,出现了打印机端口无法选择的问题,不知道该怎么办?如果打印机端口无法正常选择的话,就代表我…

简单自定义标签步骤

自定义标签主要用于移除Jsp页面中的java代码。 使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤:编写一个实现Tag接口的Java类(标签处理器类)。编写标签库描述符(tld)文件,在tld文件中对标签处理器类进…

计算机相关科幻小说,科幻小说家和计算机科学家总是用人工智能来迷惑我们,计算机可以...

科幻小说家和计算机科学家总是用人工智能来迷惑我们,计算机可以自我思考。相关句子1、从更广泛的意义上看,借助计算机科学,我们可以了解人类思想的本质和理性的意义,学会回答如何度过一生这个最古老的问题。把认知视为一种解决周围…

Android 4 学习(20):ActionBar

参考《Pro Android 4.0》 ActionBar 11.0之后,ActionBar在Activity中默认存在,可以在代码中设置其显示与否: ActionBar actionBar getActionBar(); // Hide the Action Bar actionBar.hide(); // Show the Action Bar actionBar.show(); …

计算机WIN7动态硬盘分区,win7硬盘分区教程

win7硬盘分区教程硬盘分区其实是对硬盘的一种格式化,进行了此步骤后才可以使用硬盘保存各种数据,下面是小编为大家详细介绍win7硬盘分区教程,欢迎大家阅读!一、进入磁盘管理工具我们点击要对硬盘进行分区,我们首先得知…

一个经典的对象级别插件的开发

先新建一个js,名为jquery.lifocuscolor.js,编写一下代码: (function($) { $.fn.extend({ "focusColor": function(li_col) { var def_col "#ccc"; //默认获取焦点的色值 var lst_col "#fff"; //默认丢失焦点…

计算机的alu的作用,算术逻辑运算单元(ALU)的基本功能是什么 – 手机爱问

2004-12-28解释定点运算器的功能和组成部件解释定点算器包括ALU\阵列乘除器\寄存器\多路开关\三态缓冲器\数据总线等逻辑部件。运算器的设计,主要是围绕ALU和寄存器同数据总线之间如何传送操作数和运算结果进行的。在决定方案时,需要考虑数据传送的方便性和操作速度,在微型机和…

asp.net返回值当文件下载问题

mvc中返回的javascript当做文件下载 解决方案 Response.ContentEncoding System.Text.Encoding.UTF8; Response.ContentType "text/html"; 或者使用 Page.ClientScript.RegisterClientScriptBlock (上面两句话就不用写了)转载于:https://ww…

SQL中的left outer join,inner join,right outer join用法

使用关系代数合并数据1 关系代数合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的。在关系代数的形式化语言中:? 用表、或者数据集合表示关系或者实体。? 用行表示元组。? 用列表示属性。关系代数包含以下…

笔记本上的小键盘计算机怎样用,笔记本数字小键盘不能用怎么办【解决方法】...

许多笔记本键盘中都会携带一个小键盘,与台式电脑的键盘大小差不多,小键盘上面标注着阿拉伯数字0到9,非常适合会计行业的人们使用。小键盘可以帮助人们快速地将数字敲打出来,使用起来极为方便。要知道,大键盘属于输入设…

PHP json_encode

草稿 <?php$demo1 array(result >true ); echo json_encode($demo1);//{"result":true}$picsListarray("countTotal">2,"list"> array(array(name >orabge.jpg,size>1233123),array(name >apple.jpg ,size>73878 )) )…