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 相关文章推荐
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
Jan 02 Javascript
jQuery的观察者模式详解
Dec 22 Javascript
JS实现Fisheye效果动感放大菜单代码
Oct 21 Javascript
九种原生js动画效果
Nov 11 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
Apr 29 Javascript
AngularJS表单详解及示例代码
Aug 17 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Dec 15 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
Mar 02 Javascript
浅谈Vue下使用百度地图的简易方法
Mar 23 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 Javascript
在Vue中使用antv的示例代码
Jun 29 Javascript
JavaScript事件委托实现原理及优点进行
Aug 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的一个基础知识 表单提交
2011/07/04 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
5 种JavaScript编码规范
2018/01/30 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
Python入门教程之if语句的用法
2015/05/14 Python
Python如何发布程序的详细教程
2018/10/09 Python
flask框架路由常用定义方式总结
2019/07/23 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
一组SQL面试题
2016/02/15 面试题
汽车专业学生自我评价
2014/01/19 职场文书
护士个人自我鉴定
2014/03/24 职场文书
借款担保书范文
2014/05/13 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
商务司机岗位职责
2015/04/10 职场文书
Python 实现定积分与二重定积分的操作
2021/05/26 Python
python实现自定义日志的具体方法
2021/05/28 Python
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL