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 相关文章推荐
jQuery让控件左右移动的三种实现方法
Sep 08 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
jquery中trigger()无法触发hover事件的解决方法
May 07 Javascript
JS使用正则表达式除去字符串中重复字符的方法
Nov 05 Javascript
如何用JavaScript实现动态修改CSS样式表
May 20 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
JavaScript实现简单的双色球(实例讲解)
Jul 31 Javascript
Vuejs 页面的区域化与组件封装的实现
Sep 11 Javascript
Angular 作用域scope的具体使用
Dec 11 Javascript
详解vue.js数据传递以及数据分发slot
Jan 20 Javascript
web前端页面生成exe可执行文件的方法
Feb 08 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
Vue脚手架的简单使用实例
2018/07/10 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
Python json模块使用实例
2015/04/11 Python
python实现QQ批量登录功能
2019/06/19 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
HTML5标签大全
2016/11/23 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
法学个人求职信范文
2014/01/27 职场文书
爸爸的花儿落了教学反思
2014/02/20 职场文书
出纳员的岗位职责
2014/02/22 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
委托书范文
2014/04/02 职场文书
优秀员工演讲稿
2014/05/19 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS
Python中json.dumps()函数的使用解析
2021/05/17 Python
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android