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 相关文章推荐
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
Jan 23 Javascript
ExtJS自定义主题(theme)样式详解
Nov 18 Javascript
js用拖动滑块来控制图片大小的方法
Feb 27 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
May 07 Javascript
判断输入的字符串是否是日期格式的简单方法
Jul 11 Javascript
JS中使用DOM来控制HTML元素
Jul 31 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
Jun 19 Javascript
Vuex 入门教程
Jan 10 Javascript
轻松学习JavaScript函数中的 Rest 参数
May 30 Javascript
详解Vue template 如何支持多个根结点
Feb 10 Javascript
vue移动端写的拖拽功能示例代码
Sep 09 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
模仿OSO的论坛(五)
2006/10/09 PHP
PHP实现图片简单上传
2006/10/09 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
php模板引擎技术简单实现
2016/03/15 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
Python入门_浅谈for循环、while循环
2017/05/16 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
机器学习实战之knn算法pandas
2019/06/22 Python
Django 大文件下载实现过程解析
2019/08/01 Python
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
中英文自我评价常用句型
2013/12/19 职场文书
咖啡蛋糕店创业计划书
2014/01/28 职场文书
投标承诺书范本
2014/03/27 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
生产现场禁烟通知
2015/04/23 职场文书
高一英语教学反思
2016/03/03 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书