js实现继承的5种方式


Posted in Javascript onDecember 01, 2015

本文实例讲述了js实现继承的5种方式。分享给大家供大家参考,具体如下:

1、继承第一种方式:对象冒充

function Parent(username){
  this.username = username;
  this.hello = function(){
   alert(this.username);
  }
}
function Child(username,password){
  //通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承
  //第一步:this.method是作为一个临时的属性,并且指向Parent所指向的对象,
  //第二步:执行this.method方法,即执行Parent所指向的对象函数
  //第三步:销毁this.method属性,即此时Child就已经拥有了Parent的所有属性和方法 
  this.method = Parent;
  this.method(username);//最关键的一行
  delete this.method;
  this.password = password;
  this.world = function(){
   alert(this.password);
  }
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();

2、继承第二种方式:call()方法方式

call方法是Function类中的方法
call方法的第一个参数的值赋值给类(即方法)中出现的this
call方法的第二个参数开始依次赋值给类(即方法)所接受的参数

function test(str){
  alert(this.name + " " + str);
}
var object = new Object();
object.name = "zhangsan";
test.call(object,"langsin");//此时,第一个参数值object传递给了test类(即方法)中出现的this,而第二个参数"langsin"则赋值给了test类(即方法)的str
function Parent(username){
  this.username = username;
  this.hello = function(){
   alert(this.username);
  }
}
function Child(username,password){
  Parent.call(this,username);
  this.password = password;
  this.world = function(){
   alert(this.password);
  }
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();

3、继承的第三种方式:apply()方法方式

apply方法接受2个参数,
A、第一个参数与call方法的第一个参数一样,即赋值给类(即方法)中出现的this
B、第二个参数为数组类型,这个数组中的每个元素依次赋值给类(即方法)所接受的参数

function Parent(username){ 
  this.username = username; 
  this.hello = function(){ 
   alert(this.username); 
  } 
} 
function Child(username,password){ 
  Parent.apply(this,new Array(username)); 
  this.password = password; 
  this.world = function(){ 
   alert(this.password); 
  } 
} 
var parent = new Parent("zhangsan"); 
var child = new Child("lisi","123456"); 
parent.hello(); 
child.hello(); 
child.world();

4、继承的第四种方式:原型链方式,即子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承

function Person(){ 
} 
Person.prototype.hello = "hello"; 
Person.prototype.sayHello = function(){ 
  alert(this.hello); 
} 
function Child(){ 
} 
Child.prototype = new Person();//这行的作用是:将Parent中将所有通过prototype追加的属性和方法都追加到Child,从而实现了继承 
Child.prototype.world = "world"; 
Child.prototype.sayWorld = function(){ 
  alert(this.world); 
} 
var c = new Child(); 
c.sayHello(); 
c.sayWorld();

5、继承的第五种方式:混合方式

混合了call方式、原型链方式

function Parent(hello){ 
  this.hello = hello; 
} 
Parent.prototype.sayHello = function(){ 
  alert(this.hello); 
} 
function Child(hello,world){ 
  Parent.call(this,hello);//将父类的属性继承过来 
  this.world = world;//新增一些属性 
} 
Child.prototype = new Parent();//将父类的方法继承过来 
Child.prototype.sayWorld = function(){//新增一些方法 
  alert(this.world); 
} 
var c = new Child("zhangsan","lisi"); 
c.sayHello(); 
c.sayWorld();

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Chosen 基于jquery的选择框插件使用方法
May 30 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
Mar 23 Javascript
javascript+canvas实现刮刮卡抽奖效果
Jul 29 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 Javascript
jQuery通过写入cookie实现更换网页背景的方法
Apr 15 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
AngularJS过滤器详解及示例代码
Aug 16 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
Nov 07 Javascript
微信小程序之ES6与事项助手的功能实现
Nov 30 Javascript
浅析如何利用angular结合translate为项目实现国际化
Dec 08 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 Javascript
6种javascript显示当前系统时间代码
Dec 01 #Javascript
基于jQuery实现网页打印功能
Dec 01 #Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
Dec 01 #Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 #Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
Dec 01 #Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
Dec 01 #Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
Dec 01 #Javascript
You might like
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
列表内容的选择
2006/06/30 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
Python发送email的3种方法
2015/04/28 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
生物技术专业研究生自荐信
2013/09/22 职场文书
实习单位推荐信范文
2013/11/27 职场文书
迟到检讨书大全
2014/01/25 职场文书
合伙经营协议书
2014/04/18 职场文书
端午节活动总结
2014/08/26 职场文书
个人买房协议书范本
2014/10/06 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
网络营销实训总结
2015/08/03 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android