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 相关文章推荐
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
May 04 Javascript
js中string转int把String类型转化成int类型
Aug 13 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
Jun 26 Javascript
JavaScript学习小结(一)——JavaScript入门基础
Sep 02 Javascript
JS采用绝对定位实现回到顶部效果完整实例
Jun 20 Javascript
JS中script标签defer和async属性的区别详解
Aug 12 Javascript
第一次接触神奇的Bootstrap
Oct 14 Javascript
jQuery select自动选中功能实现方法分析
Nov 28 Javascript
JS实现留言板功能
Jun 17 Javascript
详解Angular的8个主要构造块
Jun 20 Javascript
vue全局使用axios的操作
Sep 08 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
Nov 07 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
第五节--克隆
2006/11/16 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
一些Python中的二维数组的操作方法
2015/05/02 Python
你应该知道的python列表去重方法
2017/01/17 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
大专自我鉴定范文
2013/10/01 职场文书
家长会学生演讲稿
2014/04/26 职场文书
保险专业求职信
2014/07/07 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
谢师宴家长致辞
2015/07/27 职场文书
军训决心书范文
2015/09/22 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技