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 相关文章推荐
利用jQuery接受和处理xml数据的代码(.net)
Mar 28 Javascript
jQuery模拟超链接点击效果代码
Apr 21 Javascript
100个不能错过的实用JS自定义函数
Mar 05 Javascript
javascript动态添加删除tabs标签的方法
Jul 06 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
Dec 18 Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 Javascript
AngularJS国际化详解及示例代码
Aug 18 Javascript
微信小程序 图片宽度自适应的实现
Apr 06 Javascript
AjaxUpLoad.js实现文件上传功能
Mar 02 Javascript
一步一步实现Vue的响应式(对象观测)
Sep 02 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
Sep 02 Javascript
使用 UniApp 实现小程序的微信登录功能
Jun 09 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
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
在视频前插入广告
2006/11/20 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
Django中多种重定向方法使用详解
2019/07/17 Python
pytorch 修改预训练model实例
2020/01/18 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
学前教育学生自荐信范文
2013/12/31 职场文书
优秀班干部事迹材料
2014/01/26 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
旅游节目策划方案
2014/05/26 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js