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 相关文章推荐
使Ext的Template可以解析二层的json数据的方法
Dec 22 Javascript
JQuery EasyUI 对话框的使用方法
Oct 24 Javascript
浅谈javascript中自定义模版
Jan 29 Javascript
javascript实现的多个层切换效果通用函数实例
Jul 06 Javascript
javascript实现保留两位小数的多种方法
Dec 18 Javascript
第二篇Bootstrap起步
Jun 21 Javascript
Angular2 路由问题修复详解
Mar 01 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
May 02 Javascript
Vue从TodoList中学父子组件通信
Feb 05 Javascript
react高阶组件添加和删除props
Apr 26 Javascript
vue解决使用$http获取数据时报错的问题
Oct 30 Javascript
JS实现滑动插件
Jan 15 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数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
php实现递归的三种基本方式
2020/07/04 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
python实现学员管理系统
2019/02/26 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
基于PyTorch中view的用法说明
2021/03/03 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
互联网创业计划书的书写步骤
2014/01/28 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
周年庆典主持词
2014/04/02 职场文书
卖房协议书
2014/04/11 职场文书
请假条的格式
2014/04/11 职场文书
给学校的建议书范文
2014/05/15 职场文书
群众路线表态发言材料
2014/10/17 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书