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下拉框内容左右移动效果的具体实现
Jul 10 Javascript
jquery获得option的值和对option进行操作
Dec 13 Javascript
使用GruntJS构建Web程序之构建篇
Jun 04 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
Jan 09 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
Jun 16 Javascript
漂亮实用的页面loading(加载)封装代码
Feb 03 Javascript
Vue组件开发技巧总结
Mar 04 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
Jul 18 Javascript
jQuery事件委托代码实践详解
Jun 21 jQuery
微信小程序在ios下Echarts图表不能滑动的问题解决
Jul 10 Javascript
JS实现“全选”和"全不选"功能代码实例
Feb 06 Javascript
基于Web Audio API实现音频可视化效果
Jun 12 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
BBS(php & mysql)完整版(五)
2006/10/09 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
Python3基础之条件与循环控制实例解析
2014/08/13 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
pycharm安装和首次使用教程
2018/08/27 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
Python 实现微信防撤回功能
2019/04/29 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
七年级英语教学反思
2014/01/15 职场文书
期末自我鉴定
2014/02/02 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
2015年防汛工作总结
2015/05/15 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
九年级英语教学反思
2016/02/15 职场文书
python热力图实现的完整实例
2022/06/25 Python