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 相关文章推荐
教您去掉ie网页加载进度条的方法
Dec 09 Javascript
js实现杯子倒水问题自动求解程序
Mar 25 Javascript
深入探寻javascript定时器
Jan 02 Javascript
js图片翻书效果代码分享
Aug 20 Javascript
JS弹出窗口插件zDialog简单用法示例
Jun 12 Javascript
Javascript OOP之面向对象
Jul 31 Javascript
JS动态加载脚本并执行回调操作
Aug 24 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
Feb 19 Javascript
动态创建Angular组件实现popup弹窗功能
Sep 15 Javascript
微信小程序自定义组件之可清除的input组件
Jul 17 Javascript
ES6函数实现排它两种写法解析
May 13 Javascript
js获取图片的base64编码并压缩
Dec 05 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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
简单实现js浮动框
2016/12/13 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
遗传算法python版
2018/03/19 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
用Python进行websocket接口测试
2020/10/16 Python
Django 实现图片上传和下载功能
2020/12/31 Python
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
2014年教师党员公开承诺书
2014/05/28 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
捐资助学感谢信
2015/01/21 职场文书
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS
Python创建SQL数据库流程逐步讲解
2022/09/23 Python