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 相关文章推荐
JS 动态加载脚本的4种方法
May 05 Javascript
实现JavaScript中继承的三种方式
Oct 16 Javascript
基于jQuery的history历史记录插件
Dec 11 Javascript
jquery 插件学习(二)
Aug 06 Javascript
asp.net中System.Timers.Timer的使用方法
Mar 20 Javascript
jQuery侧边栏实现代码
May 06 Javascript
基于javascript的Form表单验证
Dec 29 Javascript
原生JS和jQuery操作DOM对比总结
Jan 19 Javascript
js禁止Backspace键使浏览器后退的实现方法
Sep 01 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
Dec 19 Javascript
vue v-model动态生成详解
Jun 30 Javascript
IE11下处理Promise及Vue的单项数据流问题
Jul 24 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 自定义错误处理函数trigger_error()
2013/03/26 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
网页自动跳转代码收集
2009/09/27 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
python3 mmh3安装及使用方法
2019/10/09 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
应届生财务会计求职信
2013/11/05 职场文书
支教自我鉴定
2014/01/18 职场文书
军训学生自我鉴定
2014/02/12 职场文书
社区班子对照检查材料
2014/08/27 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
百家讲坛观后感
2015/06/12 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android