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 Prototype对象
Jan 07 Javascript
xml转json的js代码
Aug 28 Javascript
jQuery Ajax异步处理Json数据详解
Nov 05 Javascript
js编写一个简单的产品放大效果代码
Jun 27 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
vuejs响应用户事件(如点击事件)
Mar 14 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
Apr 12 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
May 09 Javascript
AngularJs实现聊天列表实时刷新功能
Jun 15 Javascript
JavaScript JMap类定义与使用方法示例
Jan 22 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
Mar 29 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
Feb 16 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
在字符串中把网址改成超级链接
2006/10/09 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
javascript表单正则应用
2017/02/04 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
轻松实现python搭建微信公众平台
2016/02/16 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
python快排算法详解
2019/03/04 Python
python如何读取bin文件并下发串口
2019/07/05 Python
wxPython实现文本框基础组件
2019/11/18 Python
python双向链表原理与实现方法详解
2019/12/03 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
最新销售员个人自荐信
2013/09/21 职场文书
大学应届毕业生个人求职信
2013/09/23 职场文书
亲子活动总结
2014/04/26 职场文书
书香家庭事迹材料
2014/05/09 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
房地产项目合作意向书
2015/05/08 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android