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 相关文章推荐
图片自动缩小的js代码,用以防止图片撑破页面
Mar 12 Javascript
JS 如果改变span标签的是否隐藏属性
Oct 06 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
Aug 01 Javascript
javascript静态页面传值的三种方法分享
Nov 12 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
通过JS判断联网类型和连接状态的实现代码
Apr 01 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
Aug 03 Javascript
浅谈js里面的InttoStr和StrtoInt
Jun 14 Javascript
完美解决linux下node.js全局模块找不到的情况
May 16 Javascript
js实现搜索栏效果
Nov 16 Javascript
微信小程序上传多图到服务器并获取返回的路径
May 05 Javascript
详解小程序如何动态绑定点击的执行方法
Nov 26 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入门教程 精简版
2009/12/13 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
requireJS使用指南
2016/04/27 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
Python快速查找list中相同部分的方法
2018/06/27 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
Python如何对XML 解析
2020/06/28 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
人力资源管理专业自荐书范文
2014/02/10 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
供用电专业求职信
2014/07/07 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
实习科室评语
2015/01/04 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
舞出我人生观后感
2015/06/16 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书