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 相关文章推荐
JavaScript For Beginners(转载)
Jan 05 Javascript
js获取光标位置和设置文本框光标位置示例代码
Jan 09 Javascript
jQuery简单实现隐藏以及显示特效
Feb 26 Javascript
jquery使用remove()方法删除指定class子元素
Mar 26 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
Aug 21 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
JS实现HTML标签转义及反转义
Apr 14 Javascript
前后端如何实现登录token拦截校验详解
Sep 03 Javascript
解决layer弹出层msg的文字不显示的问题
Sep 11 Javascript
js实现无缝轮播图效果
Mar 09 Javascript
JS中准确判断变量类型的方法
Jun 01 Javascript
在vue中封装方法以及多处引用该方法详解
Aug 14 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
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
js查找节点的方法小结
2015/01/13 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
Python导入oracle数据的方法
2015/07/10 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
建筑专业自我鉴定
2013/10/22 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
酒店值班经理的工作职责范本
2014/02/18 职场文书
2014年创卫实施方案
2014/02/18 职场文书
运动会的口号
2014/06/09 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
django 认证类配置实现
2021/11/11 Python