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入门·对象属性方法大总结
Oct 01 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
Nov 09 Javascript
浏览器打开层自动缓慢展开收缩实例代码
Jul 04 Javascript
js获取表格的行数和列数的方法
Oct 23 Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 Javascript
深入理解JS中的substr和substring
Apr 26 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
Aug 04 Javascript
vue中如何让子组件修改父组件数据
Jun 14 Javascript
详解vue-cli下ESlint 配置说明
Sep 03 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 Javascript
解决Nuxt使用axios跨域问题
Jul 06 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
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
js中onload与onunload的使用示例
2013/08/25 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
Python学习资料
2007/02/08 Python
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
python 中xpath爬虫实例详解
2019/08/26 Python
python deque模块简单使用代码实例
2020/03/12 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
详解Python中的路径问题
2020/09/02 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
人民调解协议书范本
2014/10/11 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
旅行社计调工作总结
2015/08/12 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
Java获取字符串编码格式实现思路
2022/09/23 Java/Android