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 相关文章推荐
CSS+Jquery实现页面圆角框方法大全
Dec 24 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
Sep 13 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 Javascript
jquery 表单验证之通过 class验证表单不为空
Nov 02 Javascript
jQuery绑定事件的四种方式介绍
Oct 31 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
Nov 10 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
Mar 27 Javascript
浅谈在Vue-cli里基于axios封装复用请求
Nov 06 Javascript
最实用的JS数组函数整理
Dec 05 Javascript
angularjs 缓存的使用详解
Mar 19 Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 Javascript
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 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
PHP 定界符 使用技巧
2009/06/14 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
phalcon框架使用指南
2016/02/23 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
js实现拖拽功能
2017/03/01 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
跟老齐学Python之for循环语句
2014/10/02 Python
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
python在不同层级目录import模块的方法
2016/01/31 Python
Python Requests安装与简单运用
2016/04/07 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
python实现二分查找算法
2017/09/21 Python
python实现类之间的方法互相调用
2018/04/29 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
python之拟合的实现
2019/07/19 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
python数字类型math库原理解析
2020/03/02 Python
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
领导班子四风问题对照检查材料
2014/09/27 职场文书
国情备忘录观后感
2015/06/04 职场文书
遗失证明范文
2015/06/19 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android