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 hover事件实现表格的隔行换色功能示例
Sep 03 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
关于jQuery判断元素是否存在的问题示例探讨
Jul 21 Javascript
JavaScript获取表单内所有元素值的方法
Apr 02 Javascript
jquery获取下拉框中的循环值
Feb 08 Javascript
JavaScript实现隐藏省略文字效果的方法
Apr 27 Javascript
JS+Ajax实现百度智能搜索框
Aug 04 Javascript
npm 下载指定版本的组件方法
May 17 Javascript
Vue实现简易翻页效果源码分享
Nov 08 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
js实现简单的倒计时
Jan 28 Javascript
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
Jun 29 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 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
php分页函数示例代码分享
2014/02/24 PHP
php文件下载处理方法分析
2015/04/22 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
python处理按钮消息的实例详解
2017/07/11 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
python操作redis数据库的三种方法
2020/09/10 Python
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
Shell如何接收变量输入
2016/08/06 面试题
大学生个人推荐信范文
2013/11/25 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
欢迎横幅标语
2014/06/17 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
工资收入证明
2014/10/07 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
餐馆开业致辞
2015/08/01 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android
MySQL主从切换的超详细步骤
2022/06/28 MySQL