设计模式之Mixin模式
介绍

mixin模式就是一些提供能够被一个或者一组子类简单继承功能的类,意在重用其功能。在面向对象的语言中,我们会通过接口继承的方式来实现功能的复用。但是在javascript中,我们没办法通过接口继承的方式,但是我们可以通过javascript特有的原型链属性,将功能引用复制到原型链上,达到功能的注入。

具体实现代码:

var Car = function(opts){this.speed = opts.speed || 0} var Bike = function(opts){this.speed = opts.speed || 0;this.ride = function(){console.log('现在骑行速度是' + this.speed)}}var Feature = function(){}Feature.prototype = {drive : function(){console.log('现在开车速度是' + this.speed)},accelerate : function(val){this.speed = this.speed + val;}}//混入模式的实现function Mixin(recClass,giveClass){if(arguments.length > 2){for(var i = 2,lenth = arguments.length; i < lenth ; ++ i){var methodName = arguments[i];recClass.prototype[methodName] = giveClass.prototype[methodName];}}else{for(var methodName in giveClass.prototype){if(!recClass.prototype[methodName]){recClass.prototype[methodName] = giveClass.prototype[methodName];}}}}Mixin(Car,Feature);var BMW = new Car({})BMW.accelerate(20)BMW.drive()Mixin(Bike,Feature,'accelerate');var ofo = new Bike({})ofo.accelerate(8);ofo.ride();

#91;#12304;#26469;#20998;#26399;#23458;#26381;#30005;#35805;#12305;#93;相关推荐

  1. python实例 91,92,93,94

    目录 Time 模块 91.时间函数举例1 92.时间函数举例2 93.时间函数举例3 94.时间函数举例4,一个猜数游戏,判断一个人反应快慢 Time 模块 Time 模块包含了以下内置函数,既有时 ...

  2. 提取了下刘汝佳推荐的题号...

    今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started    10055 - Hashmat the Brave Warrior ...

  3. Office 2007打开文档提示安装Web Developer和MUI解决

    主要解决办法是卸载 Web Developer 和MUI MS是这篇文章解决 http://support.microsoft.com/kb/290301/ 下载对应office的版本,运行卸载. 旧 ...

  4. 一、通过命令行体验长安链

    一.通过命令行体验长安链 1 .概述 2.环境依赖 2.1.硬件依赖 2.2.软件依赖 2.3.git安装 2.4.golang安装 2.5.gcc 3.环境搭建 3.1.源码下载 3.2. 源码编译 ...

  5. 算法最少分组法_数据结构

    20210328 https://blog.csdn.net/sinat_41144773/article/details/89530403 树.二叉树(完全二叉树.满二叉树)概念图解 二叉树:每个结 ...

  6. 【CV】吴恩达机器学习课程笔记 | 第1-15章

    目录 1 介绍 1-3 监督学习 1-4 无监督学习 2 单变量线性回归 2-2 代价函数 2-5 Batch 梯度下降算法 4 多变量线性回归 4-1 多特征 4-2 多元梯度下降法 4-3 多元梯 ...

  7. 获取request的变量

    由于IP代码未实现,先注释掉. 1 package com.helloweenvsfei.servlet; 2 3 import java.io.IOException; 4 import java. ...

  8. 一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)

    TZHSWEET:请大家多多反馈问题,我已经在修改中了,已更新版本...... 如果大家遇到数据库附加问题,EF连接字符串问题,请自行配置,如果有bug反馈可以私聊,我的qq:409180955. 项 ...

  9. 一个虚函数和虚继承的问题。

    这个问题困惑好几天了.废话不多说,先上代码. 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: ...

  10. SVM算法实现光学字符识别

    目录 1.数据来源 2.数据预处理 3.模型训练 4.模型性能评估 5.模型性能提升 5.1.核函数的选取 5.2.惩罚参数C的选取 OCR (Optical Character Recognitio ...

最新文章

  1. linux指令笔试,Linux笔试常用命令
  2. 为什么使用 Vuetify?
  3. 博士申请 | 普渡大学郭齐教授组招收计算成像全奖博士生
  4. 深入浅出学Hive:Hive参数
  5. 《C语言深度解剖》学习笔记之符号
  6. php100教程源码,PHP100 视频教程 2012-2013版_PHP教程
  7. python在统计专业的应用_Python:使用Counter进行计数统计
  8. C#:xml操作(待补充)
  9. 计算机网络考研辅导谁的好,计算机网络考研辅导哪个好
  10. window_redis
  11. 高拍仪是否支持TWAIN方式的测试方法
  12. Drools教程(基础篇)——创建项目
  13. android+反编译加广告,追书神器Android版,反编译去广告基本教程
  14. window7电脑显示屏调亮度的四种方式
  15. 运放的开环增益和相移
  16. 密西根州立大学计算机qs分数,密歇根州立大学有哪些专业_专业排名(QS世界排名)...
  17. java咖啡馆_Java咖啡馆(11):Java插件技术
  18. 他是马化腾的偶像,拒绝马云的应聘 !如今劝年轻人不要太拼、要认命......
  19. docker 容器健康检查
  20. GHOST启动盘制作

热门文章

  1. python/Matplotlib绘制复变函数图像
  2. 微信连wifi 电脑怎么连接到服务器,微信连wifi怎么用 微信连Wi-Fi开通使用教程-电脑教程...
  3. 各种品牌电脑U盘启动快捷键
  4. websocket实现多房间聊天室
  5. Mac外接显示器默认30hz
  6. 全新小说安装教程小程序源码
  7. Seafile私有云盘搭建详解
  8. 公众号淘客怎么运营推广,找到适合自己的的推广方法才有效
  9. 三菱Q系列plc11轴运动控制程序
  10. 简单控件学习——Lable/HyperLink