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之九 一些瑕疵说明
Jun 21 Javascript
jquery getScript动态加载JS方法改进详解
Nov 15 Javascript
利用js实现选项卡的特别效果的实例
Mar 03 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
ES6中class类用法实例浅析
Apr 06 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
jQuery Datatables表头不对齐的解决办法
Nov 27 jQuery
利用vue组件自定义v-model实现一个Tab组件方法示例
Dec 06 Javascript
原生JS实现的双色球功能示例
Feb 02 Javascript
React路由管理之React Router总结
May 10 Javascript
深入理解vue中的slot与slot-scope
Apr 22 Javascript
JavaScript编码小技巧分享
Sep 17 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
第十二节--类的自动加载
2006/11/16 PHP
收藏的一个php小偷的核心程序
2007/04/09 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
javascript css float属性的特殊写法
2008/11/13 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
2018/04/27 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Python self用法详解
2020/11/28 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
工厂保洁员岗位职责
2013/12/04 职场文书
网络程序员自荐信
2014/01/25 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
详细介绍python操作RabbitMq
2022/04/12 Python
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技