本文实例讲述了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);
现在你应该大概了解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);
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);
总结
很多前端库里都有mixin方法,只是叫法不一样,比如 jQuery的extend ,文中我们实现的都是浅拷贝,jQuery中的extend可以实现深拷贝。很多库会使用mixin的方式,将一些工具方法扩展到相应对象中,实现代码复用。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# JavaScript
# mixin
# 多继承
# 用JavaScript实现单继承和多继承的简单方法
# ExtJS4中使用mixins实现多继承示例
# js中继承的几种用法总结(apply
# call
# prototype)
# 实现JavaScript中继承的三种方式
# JS继承--原型链继承和类式继承
# Javascript基于对象三大特性(封装性、继承性、多态性)
# Javascript 继承机制的实现
# 再谈javascript原型继承
# JavaScript继承与多继承实例分析
# 都是
# 都有
# 是一种
# 相关内容
# 是有
# 那就
# 子类
# 做什么
# 遍历
# 感兴趣
# 数据结构
# 给大家
# 拷贝到
# 只有一个
# 你应该
# 可以实现
# 更多关于
# 所述
# 程序设计
# 面向对象
相关文章:
网站制作网站,深圳做网站哪家比较好?
建站之星云端配置指南:模板选择与SEO优化一键生成
如何做网站制作流程,*游戏网站怎么搭建?
如何快速搭建FTP站点实现文件共享?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
建站168自助建站系统:快速模板定制与SEO优化指南
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何做静态网页,sublimetext3.0制作静态网页?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
音响网站制作视频教程,隆霸音响官方网站?
如何在阿里云香港服务器快速搭建网站?
如何在阿里云高效完成企业建站全流程?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
建站主机选择指南:服务器配置与SEO优化实战技巧
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
建站之星展会模版如何一键下载生成?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何挑选高效建站主机与优质域名?
如何通过万网虚拟主机快速搭建网站?
南宁网站建设制作定制,南宁网站建设可以定制吗?
如何选择香港主机高效搭建外贸独立站?
简历在线制作网站免费版,如何创建个人简历?
如何用wdcp快速搭建高效网站?
b2c电商网站制作流程,b2c水平综合的电商平台?
如何用腾讯建站主机快速创建免费网站?
网站网页制作专业公司,怎样制作自己的网页?
建站之星24小时客服电话如何获取?
PHP 500报错的快速解决方法
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
,购物网站怎么盈利呢?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
h5网站制作工具有哪些,h5页面制作工具有哪些?
外贸公司网站制作哪家好,maersk船公司官网?
定制建站哪家更专业可靠?推荐榜单揭晓
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何高效利用亚马逊云主机搭建企业网站?
如何通过IIS搭建网站并配置访问权限?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
如何基于云服务器快速搭建个人网站?
如何快速搭建个人网站并优化SEO?
c# 服务器GC和工作站GC的区别和设置
实惠建站价格推荐:2025年高性价比自助建站套餐解析
宝塔Windows建站如何避免显示默认IIS页面?
开源网站制作软件,开源网站什么意思?
*请认真填写需求信息,我们会在24小时内与您取得联系。