js继承call()和apply()方法总结


Posted in Javascript onDecember 08, 2014

1、方法定义

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(); 

 Animal.call(this) 的意思就是使用 Animal对象代替this对象,那么 Cat中不就有Animal的所有属性和方法了吗,Cat对象就能够直接调用Animal的方法以及属性了.

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..

Javascript 相关文章推荐
JavaScript window.setTimeout() 的详细用法
Nov 04 Javascript
轻量级javascript 框架Backbone使用指南
Jul 24 Javascript
js实现的动画导航菜单效果代码
Sep 10 Javascript
Bootstrap每天必学之js插件
Nov 30 Javascript
简单实现js选项卡切换效果
Feb 03 Javascript
JS原型、原型链深入理解
Feb 27 Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 Javascript
JavaScript实现简单的星星评分效果
May 18 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
Jun 04 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
Feb 11 Javascript
JS装饰器函数用法总结
Apr 21 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
Dec 08 #Javascript
详解Javascript动态操作CSS
Dec 08 #Javascript
jquery.ajax之beforeSend方法使用介绍
Dec 08 #Javascript
实例讲解JQuery中this和$(this)区别
Dec 08 #Javascript
Jquery实现由下向上展开效果的例子
Dec 08 #Javascript
Javascript常用字符串判断函数代码分享
Dec 08 #Javascript
jQuery/CSS3图片特效插件整理推荐
Dec 07 #Javascript
You might like
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用python判断你是青少年还是老年人
2018/11/29 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
pycharm运行scrapy过程图解
2019/11/22 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
2014年两会学习心得体会
2014/03/17 职场文书
公司业务员岗位职责
2014/03/18 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
环卫工作个人总结
2015/03/04 职场文书
创业计划书之书店
2019/09/10 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
python之json文件转xml文件案例讲解
2021/08/07 Python
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
python中redis包操作数据库的教程
2022/04/19 Python