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 拾碎[三] 使用className属性
Oct 16 Javascript
浅析jQuery的链式调用之each函数
Dec 03 Javascript
基于jquery封装的一个js分页
Nov 15 Javascript
JS中setTimeout()的用法详解
Apr 14 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
uploadify多文件上传参数设置技巧
Nov 16 Javascript
JavaScript手机振动API
Jun 11 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
Aug 02 Javascript
一个可复用的vue分页组件
May 15 Javascript
js实现简单的秒表
Jan 16 Javascript
基于vue和bootstrap实现简单留言板功能
May 30 Javascript
js 数组 fill() 填充方法
Nov 02 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
一个取得文件扩展名的函数
2006/10/09 PHP
PHP新手上路(十)
2006/10/09 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
JS实现拼图游戏
2021/01/29 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
Python3计算三角形的面积代码
2017/12/18 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
python实现简单http服务器功能
2018/09/17 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
python实现智能语音天气预报
2019/12/02 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
怎么处理XML的中文问题
2015/03/26 面试题
小区门卫值班制度
2014/01/24 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
2015个人简历自我评价语
2015/03/11 职场文书