JavaScript实现多重继承的方法分析


Posted in Javascript onJanuary 09, 2018

本文实例讲述了JavaScript实现多重继承的方法。分享给大家供大家参考,具体如下:

1. 定义一个空的父类构造函数,然后通过prototype的方式为该父类定义属性和方法

2. 定义一个空的子类的构造函数,然后将子类的原型绑定在父类的实例上,再将子类原型的父类也绑定在父类的实例上。通过prototype的方式为子类设置自己的属性和方法。

3. 定义一个空的孙类构造函数,然后将孙类的原型绑定到子类的实例上,再将孙类原型的父类绑定到子类的实例上。通过prototype方式为孙类定义自己的属性和方法。

4. 实例化一个孙类对象,通过调用该实例对象,调用自身的方法,也可以调用孙类的父类即文中的子类的方法,也可直接调用最大父类即这里父类的方法,也可以为当前对象添加属性和方法。

function Person(){}
Person.prototype.name = "人";// 为人类创建一个name属性
Person.prototype.say = function(content){// 为人类创建一个说话的方法
  if(!this.name){ // 如果对象不存在name属性,则使用原型链的name
    this.name = this.__proto__.name;
  }
  console.log("我是" + this.name + ",我想说"+content);
};
function Parent(){}
Parent.prototype = new Person();  // 设置Parent类继承Person类
Parent.prototype.superClass = new Person();// 设置superClass保存父类Person的方法属性
Parent.prototype.name = "父辈类";// 设置Parent类的name属性
Parent.prototype.say = function(){// 设置Parent类自己的 say 方法
  console.log("我是Parent类的say方法!");
};
function Child(){}
Child.prototype = new Parent();// 设置Child类继承Parent类
Child.prototype.superClass = new Parent();// 设置superClass保存父类Parent的方法属性
Child.prototype.say = function(){  //设置Child类自己的say方法
  console.log("我是Child类的say方法!");
}
var c = new Child();// 实例化一个Child对象
c.say();  // 调用自身原型的say方法,输出:我是Child类的say方法!
c.superClass.say(); // 调用父类Parent的say方法,输出: 我是Parent类的say方法!
c.superClass.superClass.say("哈哈");// 直接调用最大的父类Person的say方法(方法中的this指向Person),输出:我是人,我想说哈哈"
// 用call调用最大的父类Person的say方法(方法中的this指向实例化对象c,但此时c并没有name属性,所以this.name用的是Parent的name)
c.superClass.superClass.say.call(c,"嘻嘻"); // 输出:我是父辈类,我想说嘻嘻
c.name = "子类实例";// 给当前对象增加name属性
// 还是用call调用最大父类Person的say方法(此时c对象中已经有name属性);
c.superClass.superClass.say.call(c,"我是子类的实例化对象"); // 输出:我是子类实例,我想说我是子类的实例化对象

ps:多重继承可以在原型对象上新增一个属性用以保存父类的对象和属性,子类调用的时候使用superClass点出父类方法,这样一来就解决了父类和子类方法同名,子类继承父类之后会覆盖父类方法的问题。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
让Firefox支持event对象实现代码
Nov 07 Javascript
10个基于浏览器的JavaScript调试工具分享
Feb 07 Javascript
对JavaScript客户端应用编程的一些建议
Jun 24 Javascript
Bootstrap每天必学之媒体对象
Nov 30 Javascript
浅谈JavaScript 覆盖原型以及更改原型
Aug 31 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
vue实现仿淘宝结账页面实例代码
Nov 08 Javascript
javascript高仿热血传奇游戏实现代码
Feb 22 Javascript
如何从零开始利用js手写一个Promise库详解
Apr 19 Javascript
使用webpack3.0配置webpack-dev-server教程
May 29 Javascript
vuex实现的简单购物车功能示例
Feb 13 Javascript
ElementUI之Message功能拓展详解
Oct 18 Javascript
webpack多入口文件页面打包配置详解
Jan 09 #Javascript
Vue项目组件化工程开发实践方案
Jan 09 #Javascript
详解webpack之scss和postcss-loader的配置
Jan 09 #Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
Jan 09 #Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
Jan 09 #Javascript
详解webpack babel的配置
Jan 09 #Javascript
webpack+vue2构建vue项目骨架的方法
Jan 09 #Javascript
You might like
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
php生成word并下载代码实例
2019/03/15 PHP
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
JS实现简易计算器
2020/02/14 Javascript
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
介绍Python的@property装饰器的用法
2015/04/28 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
使用tensorflow实现AlexNet
2017/11/20 Python
浅析Python四种数据类型
2018/09/26 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
python pandas生成时间列表
2019/06/29 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
.NET面试10题
2014/02/24 面试题
50岁生日感言
2014/01/23 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫