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 相关文章推荐
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
Jun 19 Javascript
js文本框输入点回车触发确定兼容IE、FF等
Nov 19 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
Oct 30 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
Nov 28 Javascript
微信小程序实现tab左右切换效果
Nov 15 Javascript
Vue.js特性Scoped Slots的浅析
Feb 20 Javascript
详解React项目中碰到的IE问题
Mar 14 Javascript
JavaScript判断浏览器运行环境的详细方法
Jun 30 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
Oct 14 Javascript
推荐几个不错的console调试技巧实现
Dec 20 Javascript
vuex存取值和映射函数使用说明
Jul 24 Javascript
AngularJS实现多级下拉框
Mar 25 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
Zerg建筑一览
2020/03/14 星际争霸
php array的学习笔记
2012/05/10 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
JavaScript SHA512&SHA256加密算法详解
2015/08/11 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
微信小程序日历组件使用方法详解
2018/12/29 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
python模块之paramiko实例代码
2018/01/31 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
python使用smtplib模块发送邮件
2020/12/17 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
企划经理的岗位职责
2013/11/17 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
大雁塔英文导游词
2015/02/10 职场文书
企业催款函范本
2015/06/24 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
Linux安装apache服务器的配置过程
2021/11/27 Servers
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server