JavaScript mixin实现多继承的方法详解
发布时间 - 2026-01-11 00:26:49 点击率:次本文实例讲述了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继承与多继承实例分析
# 都是
# 都有
# 是一种
# 相关内容
# 是有
# 那就
# 子类
# 做什么
# 遍历
# 感兴趣
# 数据结构
# 给大家
# 拷贝到
# 只有一个
# 你应该
# 可以实现
# 更多关于
# 所述
# 程序设计
# 面向对象
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
如何获取免费开源的自助建站系统源码?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
想要更高端的建设网站,这些原则一定要坚持!
如何在建站之星网店版论坛获取技术支持?
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
🚀拖拽式CMS建站能否实现高效与个性化并存?
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
如何快速启动建站代理加盟业务?
如何在服务器上配置二级域名建站?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何确保FTP站点访问权限与数据传输安全?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
怎样使用JSON进行数据交换_它有什么限制
Laravel如何使用查询构建器?(Query Builder高级用法)
如何在IIS中新建站点并解决端口绑定冲突?
如何快速搭建安全的FTP站点?
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
如何登录建站主机?访问步骤全解析
如何快速查询域名建站关键信息?
如何快速搭建高效WAP手机网站吸引移动用户?
公司门户网站制作流程,华为官网怎么做?
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
SQL查询语句优化的实用方法总结
黑客如何通过漏洞一步步攻陷网站服务器?
原生JS获取元素集合的子元素宽度实例
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何在 Pandas 中基于一列条件计算另一列的分组均值
如何在橙子建站上传落地页?操作指南详解
千库网官网入口推荐 千库网设计创意平台入口
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
如何在IIS7上新建站点并设置安全权限?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
北京的网站制作公司有哪些,哪个视频网站最好?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
如何快速配置高效服务器建站软件?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Android GridView 滑动条设置一直显示状态(推荐)
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何为不同团队 ID 动态生成多个独立按钮
实例解析Array和String方法

