JavaScript mixin实现多继承的方法详解


Posted in Javascript onMarch 30, 2017

本文实例讲述了JavaScript mixin实现多继承的方法。分享给大家供大家参考,具体如下:

mixin简单通俗的讲就是把一个对象的方法和属性拷贝到另一个对象上,注意这个继承还是有区别的。js是一种只支持单继承的语言,毕竟一个对象只有一个原型,如果想实现多继承,那就简单暴力的把需要继承的父类的所有属性都拷贝到子类上,就是使用mixin啦。

下面所有代码可以到github上查看完整版。

一个简单的mixin

直接上代码

function extend(destClass, srcClass) {
  var destProto = destClass.prototype;
  var srcProto = srcClass.prototype;
  for (var method in srcProto) {
    if (!destProto[method]) {
      destProto[method] = srcProto[method];
    }
  }
}
function Book(){}
Book.prototype.printName = function(){
  console.log('I am a book, named hello');
};
function JS(){}
extend(JS, Book);
var js = new JS();
console.log(js);

JavaScript mixin实现多继承的方法详解

现在你应该大概了解mixin在做什么。

可以仅仅拷贝某些方法:

function extend(destClass, srcClass, methods) {
  var srcProto = srcClass.prototype;
  var destProto = destClass.prototype ;  
  for (var i=0; i<methods.length; i++) {
    var method = methods[i];
    if (!destProto[method]) {
      destProto[method] = srcProto[method];
    }
  }
}
function Book() {}
Book.prototype.getName = function() {};
Book.prototype.setName = function() {};
function JS() {}
extend(JS, Book, ['getName']);
var js = new JS();
console.log(js);

JavaScript mixin实现多继承的方法详解

mixin实现多继承

直接上代码。

function extend(destClass) {
  var classes = Array.prototype.slice.call(arguments, 1);
  for (var i=0; i<classes.length; i++) {
    var srcClass = classes[i];
    var srcProto = srcClass.prototype;
    var destProto = destClass.prototype; 
    for (var method in srcProto) {
      if (!destProto[method]) {
        destProto[method] = srcProto[method];
      }
    }
  }
}
function Book() {}
Book.prototype.getName = function() {};
Book.prototype.setName = function() {};
function Tech(){}
Tech.prototype.showTech = function(){};
function JS() {}
extend(JS, Book, Tech);
var js = new JS();
console.log(js);

JavaScript mixin实现多继承的方法详解

总结

很多前端库里都有mixin方法,只是叫法不一样,比如 jQuery的extend ,文中我们实现的都是浅拷贝,jQuery中的extend可以实现深拷贝。很多库会使用mixin的方式,将一些工具方法扩展到相应对象中,实现代码复用。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
IE与firefox下Dhtml的一些区别小结
Dec 02 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
Mar 17 Javascript
分享10个原生JavaScript技巧
Apr 20 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
JavaScrip调试技巧之断点调试
Oct 22 Javascript
简介AngularJS中$http服务的用法
Feb 06 Javascript
深入浅出讲解ES6的解构
Aug 03 Javascript
js实现轮播图的完整代码
Oct 26 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
ES6 Map结构的应用实例分析
Jun 26 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
Nov 09 jQuery
Angular.JS中的指令引用template与指令当做属性详解
Mar 30 #Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 #jQuery
jQuery实现Select下拉列表进行状态选择功能
Mar 30 #jQuery
借助node实战JSONP跨域实例
Mar 30 #Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 #Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
Mar 30 #Javascript
实例详解display:none与visible:hidden的区别
Mar 30 #Javascript
You might like
PHP 中的一些经验积累
2006/10/09 PHP
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
使用store来优化React组件的方法
2017/10/23 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
python代码如何注释
2020/06/01 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
教师党员思想汇报
2014/01/06 职场文书
护理专业自我鉴定
2014/01/30 职场文书
四下基层实施方案
2014/03/28 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
防火标语大全
2014/10/06 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
优秀英文求职信范文
2015/03/19 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python