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 相关文章推荐
不同浏览器的怪癖小结
Jul 11 Javascript
js实现带圆角的两级导航菜单效果代码
Aug 24 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
Jun 02 Javascript
jQuery页面加载初始化的3种方法(推荐)
Jun 02 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
Jun 30 Javascript
jQuery之简单的表单验证实例
Jul 07 Javascript
AngularJS常见过滤器用法实例总结
Jul 06 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
Feb 01 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
Nov 25 Javascript
微信小程序:数据存储、传值、取值详解
May 07 Javascript
解决vue 子组件修改父组件传来的props值报错问题
Nov 09 Javascript
vue+element 实现商城主题开发的示例代码
Mar 26 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在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
PHP中的session安全吗?
2016/01/22 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
js一组验证函数
2008/12/20 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
js中document.write的那点事
2014/12/12 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
Python中内建函数的简单用法说明
2016/05/05 Python
windows及linux环境下永久修改pip镜像源的方法
2016/11/28 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
python实现实时视频流播放代码实例
2020/01/11 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
业务员自荐信范文
2014/04/20 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
交通事故委托书范本
2014/09/28 职场文书
六五普法宣传标语
2014/10/06 职场文书
晚会闭幕词
2015/01/28 职场文书
消防隐患整改通知书
2015/04/22 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
三八节活动简报
2015/07/20 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
JavaScript 原型与原型链详情
2021/11/02 Javascript