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 相关文章推荐
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
ext 代码生成器
Aug 07 Javascript
jquery+json 通用三级联动下拉列表
Apr 19 Javascript
基于jQuery的计算文本框字数的代码
Jun 06 Javascript
使用JQuery实现智能表单验证功能
Mar 08 Javascript
jQuery实现的导航下拉菜单效果
Jul 04 Javascript
Angular将填入表单的数据渲染到表格的方法
Sep 22 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
Nov 01 Javascript
详解.vue文件中style标签的几个标识符
Jul 17 Javascript
js实现轮播图特效
May 28 Javascript
Vue路由切换页面不更新问题解决方案
Jul 10 Javascript
前端学习——JavaScript原生实现购物车案例
Mar 31 Javascript
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
桌面中心(三)修改数据库
2006/10/09 PHP
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
解放web程序员的输入验证
2006/10/06 Javascript
破除一些网站复制、右键限制
2006/11/04 Javascript
Javascript之文件操作
2007/03/07 Javascript
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
python聊天程序实例代码分享
2013/11/18 Python
跟老齐学Python之用Python计算
2014/09/12 Python
Python每天必学之bytes字节
2016/01/28 Python
python 连接sqlite及简单操作
2017/06/30 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
英国领先的独立酒精饮料零售商:DrinkSupermarket
2021/01/13 全球购物
普通大学毕业生自荐信
2013/11/04 职场文书
工作中个人的自我评价
2013/12/31 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
陈欧广告词
2014/03/14 职场文书
医生个人年终总结
2015/02/28 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
法律讲堂观后感
2015/06/11 职场文书