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 相关文章推荐
use jscript List Installed Software
Jun 11 Javascript
iframe 自适应高度[在IE6 IE7 FF下测试通过]
Apr 13 Javascript
如何防止JavaScript自动插入分号
Nov 05 Javascript
关于JavaScript和jQuery的类型判断详解
Oct 08 Javascript
jQuery接受后台传递的List的实例详解
Aug 02 jQuery
JavaScript 自定义事件之我见
Sep 25 Javascript
AngualrJs清除定时器遇到的坑
Oct 13 Javascript
如何开发出更好的JavaScript模块
Dec 22 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
Jan 03 Javascript
Vue中使用vee-validate表单验证的方法
May 09 Javascript
jQuery插件实现弹性运动完整示例
Jul 07 jQuery
vue flex 布局实现div均分自动换行的示例代码
Aug 05 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
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
2013/12/30 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python在命令行下使用google翻译(带语音)
2014/01/16 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
Python程序中设置HTTP代理
2016/11/06 Python
Python autoescape标签用法解析
2020/01/17 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
英国排名第一的礼品体验公司:Red Letter Days
2018/08/16 全球购物
房地产融资计划书
2014/01/10 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
三八节活动简报
2015/07/20 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android