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写一个字符串转成驼峰的实例
Jun 21 Javascript
Js获取下拉框选定项的值和文本的实现代码
Feb 26 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
Jun 14 Javascript
百度多文件异步上传控件webuploader基本用法解析
Nov 07 Javascript
微信小程序 共用变量值的实现
Jul 12 Javascript
详解Layer弹出层样式
Aug 21 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
Aug 08 Javascript
为vue项目自动设置请求状态的配置方法
Jun 09 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
Sep 25 Javascript
微信小程序实现侧边分类栏
Oct 21 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
Nov 12 Javascript
Vue.js中v-for指令的用法介绍
Mar 13 Vue.js
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
为查询结果建立向后/向前按钮
2006/10/09 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php去除数组中重复数据
2014/11/18 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
Python的缺点和劣势分析
2019/11/19 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
校园之星获奖感言
2014/01/29 职场文书
二年级语文教学反思
2014/02/02 职场文书
语文教学感言
2014/02/06 职场文书
毕业大学生自荐信
2014/06/17 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
银行员工考核评语
2014/12/31 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python