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 相关文章推荐
xml 封装与解析(javascript和C#中)
Jul 26 Javascript
ko knockoutjs动态属性绑定技巧应用
Nov 14 Javascript
js中符号转意问题示例探讨
Aug 19 Javascript
9行javascript代码获取QQ群成员具体实现
Oct 16 Javascript
实例讲解JS中setTimeout()的用法
Jan 28 Javascript
浅谈jquery设置和获得checkbox选中的问题
Aug 19 Javascript
JavaScript中常用的验证reg
Oct 13 Javascript
微信小程序 网络API发起请求详解
Nov 09 Javascript
Vue通过input筛选数据
Oct 26 Javascript
Easyui使用Dialog行内按钮布局的实例
Jul 27 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 Javascript
nginx配置React静态页面的方法教程
Nov 03 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
对Django url的几种使用方式详解
2019/08/06 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
应届毕业生求职信范例分享
2013/12/17 职场文书
校长先进事迹材料
2014/02/01 职场文书
六年级数学教学反思
2014/02/03 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
运动会宣传稿100字
2015/07/23 职场文书
go开发alertmanger实现钉钉报警
2021/07/16 Golang