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 相关文章推荐
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
Mar 27 Javascript
javascript实现文字图片上下滚动的具体实例
Jun 28 Javascript
javascript读取xml实现javascript分页
Dec 13 Javascript
分享JavaScript与Java中MD5使用两个例子
Dec 23 Javascript
理解javascript中Map代替循环
Feb 26 Javascript
纯js实现手风琴效果代码
Apr 17 Javascript
jQuery Validate 数组 全部验证问题
Jan 12 Javascript
Vue组件开发初探
Feb 14 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
Feb 16 Javascript
jQuery列表检索功能实现代码
Jul 17 jQuery
angular $watch 一个变量的变化(实例讲解)
Aug 02 Javascript
Node.js系列之连接DB的方法(3)
Aug 30 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
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
Python三元运算实现方法
2015/01/12 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
详解Python locals()的陷阱
2019/03/26 Python
Python @property装饰器原理解析
2020/01/22 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
前台接待的工作职责
2013/11/21 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
音乐研修感悟
2015/11/18 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
Java 关于String字符串原理上的问题
2022/04/07 Java/Android