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 BASE64编码 window.atob(), window.btoa()
Mar 09 Javascript
javascript实现根据汉字获取简拼
Sep 25 Javascript
利用jQuery对无序列表排序的简单方法
Oct 16 Javascript
Angular中ng-bind和ng-model的区别实例详解
Apr 10 Javascript
vue-cli构建项目下使用微信分享功能
May 28 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 Javascript
如何制作一个Node命令行图像识别工具
Dec 12 Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 Javascript
Vue项目中使用jquery的简单方法
May 16 jQuery
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
Android 自定义view仿微信相机单击拍照长按录视频按钮
Jul 19 Javascript
javascript事件循环event loop的简单模型解释与应用分析
Mar 14 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实现读取一个1G的文件大小
2013/08/24 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
PHP实现验证码校验功能
2017/11/16 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
js控制div层的叠加简单方法
2016/10/15 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
[46:20]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第二场 1月22日
2021/03/11 DOTA
python操作MySQL数据库的方法分享
2012/05/29 Python
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
python的concat等多种用法详解
2018/11/28 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
python实现滑雪者小游戏
2020/02/22 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
公司人事任命通知
2015/04/20 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
2015大学迎新标语
2015/07/16 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
python 网络编程要点总结
2021/06/18 Python
css3新特性的应用示例分析
2022/03/16 HTML / CSS
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫