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 相关文章推荐
一段利用WSH修改和查看IP配置的代码
May 11 Javascript
jQuery学习笔记之jQuery的事件
Dec 22 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
Oct 06 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
jQuery 重复加载错误以及修复方法
Dec 16 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
Jun 24 Javascript
JS实现css hover操作的方法示例
Apr 07 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
Jul 02 Javascript
JS实现字符串中去除指定子字符串方法分析
May 17 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
Apr 26 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
Jul 19 Javascript
JavaScript队列结构Queue实现过程解析
Mar 07 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
PHP下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
python制作websocket服务器实例分享
2016/11/20 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
医大实习自我鉴定
2013/12/07 职场文书
回门宴答谢词
2014/01/13 职场文书
护士毕业生自荐信
2014/02/07 职场文书
保密工作实施方案
2014/02/24 职场文书
经典团队口号大全
2014/06/21 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
学校运动会广播稿
2014/10/11 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python