Javascript编程之继承实例汇总


Posted in Javascript onNovember 28, 2015

本文实例讲述了Javascript编程之继承。分享给大家供大家参考,具体如下:

这篇文字是在看完《Javascript 王者归来》后的整理总结,文章详细章节在 第21章 P537

继承一般要实现以下三层含义:

1)子类实例可以共享父类的方法;
2)子类可以覆盖父类的方法或者扩展新的方法;
3)子类和父类都是子类实例的类型。

一、构造继承法

子类中调用父类的构造函数来维护的,该继承法能实现多重继承,但只能继承父类的共有方法,无法继承静态方法,而且不能用instanceof来验证实例。

function a(){
  this.say=function(){
  alert("happy new year!");
  }
}
function b(){
  a.apply(this,arguments);
}
a.prototype.fuck=function(){
  alert("%^&%^&%&^%&");
}
var oB=new b();
alert(oB instanceof a);// false
oB.say();       // happy new year
oB.fuck();       // 读不到

二、原型继承法/经典继承法

该继承法是通过复制已经存在的原型对象来实现行为重用,让对象实例共享原型对象的属性。支持多重继承,继承原型静态方法,能用instanceof来验证实例。

function a(){
 this.say=function(){
 alert("happy new year!");
 }
}
function b(){}
a.prototype.fuck=function(){
  alert("%^&%^&%&^%&");
}
a.prototype.z=123;
b.prototype=new a();
var oB=new b();
alert(oB instanceof a); // true
alert(oB.z);      // 123
oB.say();        // happy new year
oB.fuck();       // %^&%^&%&^%&

三、实例继承法/寄生构造函数模式

构造法不能继承类型的静态方法,原型继承得不完善(某些核心对象的不可枚举方法不能继承),而实例继承法能对原生核心对象或者DOM对象进行继承,它通过在类型中构造对象并返回的办法来实现继承,因此instanceof验证会是false,不支持多重继承。

function a(){
 var oA=new Array();
 oA.say=function(){
   alert("hello A!");
 }
 return oA;
}
var obj=new a();
alert(obj instanceof a); // false
obj.say();

四、拷贝继承法

该方法通过拷贝基类对象的所有可枚举属性和方法来模拟继承,因此它可以模拟多继承,但不能枚举的就无法继承;它可以继承父类的静态方法;

function a(){
  this.num=123;
  this.say=function(){
  alert("happy new year!");
  }
}
function b(){
  this.extends=function(obj){
    for(each in obj){
      this[each]=obj[each];
    }
  }
}
var oB=new b();
oB.extends(new a());
alert(oB instanceof a); // false
alert(oB.num);     // 123
oB.say();        // happy new year

五、混合继承法

顾名思义就是把上面几种继承法综合起来,取长补短,让继承更完善。常见的有 构造+原型继承:伪经典继承

function a(){
  this.num=123;
  this.say=function(){
  alert("happy new year!");
  }
}
function b(){
  a.apply(this);
}
b.prototype=new a();
b.prototype.z=123;
var oB=new b();
alert(oB instanceof a); // true
alert(oB.num);     // 123
oB.say();        // happy new year

六、各种继承法的优缺点

Javascript编程之继承实例汇总

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

Javascript 相关文章推荐
JQuery解析HTML、JSON和XML实例详解
Mar 29 Javascript
详解jQuery的表单验证插件--Validation
Dec 21 Javascript
javascript作用域链与执行环境详解
Mar 25 Javascript
Bootstrap多级菜单的实现代码
May 23 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
AngularJS中的路由使用及实现代码
Oct 09 Javascript
jQuery实现的页面详情展开收起功能示例
Jun 11 jQuery
jQuery实现为动态添加的元素绑定事件实例分析
Sep 07 jQuery
layui的布局和表格的渲染以及动态生成表格的方法
Sep 18 Javascript
Vue+axios封装请求实现前后端分离
Oct 23 Javascript
JavaScript实现手风琴效果
Feb 18 Javascript
Javascript编程中几种继承方式比较分析
Nov 28 #Javascript
详解JavaScript的变量和数据类型
Nov 27 #Javascript
详解基于Bootstrap扁平化的后台框架Ace
Nov 27 #Javascript
Bootstrap精简教程
Nov 27 #Javascript
Bootstrap每天必学之标签与徽章
Nov 27 #Javascript
Bootstrap每天必学之导航条
Nov 27 #Javascript
javascript设计模式--策略模式之输入验证
Nov 27 #Javascript
You might like
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
js动态设置div的值下例子
2013/10/29 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
jquery图片切换插件
2015/03/16 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
如何通过JS实现转码与解码
2020/02/21 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
详解Vue的七种传值方式
2021/02/08 Vue.js
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
python解析文件示例
2014/01/23 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
python3 读取Excel表格中的数据
2018/10/16 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Python中按值来获取指定的键
2019/03/04 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
毕业生找工作的求职信范文
2013/12/24 职场文书
领导干部培训感言
2014/01/23 职场文书
2015年母亲节寄语
2015/03/23 职场文书
部分武汉产收音机展览
2022/04/07 无线电