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 相关文章推荐
textarea的value是html文件源代码,存成html文件的代码
Apr 20 Javascript
JavaScript实现的一个倒计时的类
Mar 12 Javascript
浅谈JavaScript异常处理语句
Jun 26 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
Jun 30 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
Jul 04 Javascript
ReactNative Image组件使用详解
Aug 07 Javascript
无限循环轮播图之运动框架(原生JS实现)
Oct 01 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
Dec 24 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
Nov 06 Javascript
vue+element实现动态加载表单
Dec 13 Vue.js
原生js实现自定义难度的扫雷游戏
Jan 22 Javascript
JS canvas实现画板和签字板功能
Feb 23 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
建立动态的WML站点(二)
2006/10/09 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
JavaScript中0和""比较引发的问题
2016/05/26 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
简单了解django orm中介模型
2019/07/30 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
大学学年自我鉴定
2013/10/28 职场文书
环保公益广告语
2014/03/13 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
作文批改评语大全
2014/04/23 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
周一问候语大全
2015/11/10 职场文书
Java spring定时任务详解
2021/10/05 Java/Android
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL