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 相关文章推荐
游览器中javascript的执行过程(图文)
May 20 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
Oct 20 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
Dec 11 Javascript
jquery、js操作checkbox全选反选
Mar 12 Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 Javascript
javascript实现验证IP地址等相关信息代码
May 10 Javascript
浅谈jquery的html方法里包含特殊字符的处理
Nov 30 Javascript
基于JavaScript实现下拉列表左右移动代码
Feb 07 Javascript
vue如何实现observer和watcher源码解析
Mar 09 Javascript
webpack 模块热替换原理
Apr 09 Javascript
微信小程序仿抖音短视频切换效果的实例代码
Jun 24 Javascript
JavaScript数组常用的增删改查与其他属性详解
Oct 13 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来自动调用不同服务器上的flash
2006/10/09 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
PHP学习 变量使用总结
2011/03/24 PHP
第五章 php数组操作
2011/12/30 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
php生成word并下载代码实例
2019/03/15 PHP
jQuery Mobile 导航栏代码
2013/11/01 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
Ionic快速安装教程
2016/06/03 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
Django中的CBV和FBV示例介绍
2018/02/25 Python
用python实现刷点击率的示例代码
2019/02/21 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
生物制药毕业生自荐信
2013/10/16 职场文书
生产现场工艺工程师岗位职责
2013/11/28 职场文书
培训讲师岗位职责
2014/04/13 职场文书
教师评语大全
2014/04/28 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python