Mixin是一种扩展收集功能的方式,能提高代码的复用率。

在javascript中,原型可以继承于其它对象的原型,并且可以为任意数量的实例定义属性。可以利用这一点来促进函数的复用。

下面一段代码就是将一些可以被复用的代码利用underscore.js里的_.extend对原型扩展,以实现高复用。

// 一些代码,可以被下面的类混入,
var controls = {moveForward: function(){console.log(this.name + ' move forward');},moveLeft: function(){console.log(this.name + ' move left');},moveRight: function(){console.log(this.name + ' move right');}
}// Car类
function Car(){this.name = 'car';this.moveBackward = function(){console.log(this.name + ' move backward');}
}// Airplane类
function Airplane(){this.name = 'airplane';this.moveUp = function(){console.log(this.name + ' move up');}this.moveDown = function(){console.log(this.name + ' move down');}
}
_.extend(Car.prototype, controls);
_.extend(Airplane.prototype, controls);var car = new Car()
car.moveRight();var airplane = new Airplane()
airplane.moveLeft();

除了使用underscore.js里的方法进行对象扩展,我们也可以自己实现混入功能,像一些有独特需求的,比如指定混入的方法名等等。

// 一些代码,可以被下面的类混入,
var controls = {moveForward: function(){console.log(this.name + ' move forward');},moveLeft: function(){console.log(this.name + ' move left');},moveRight: function(){console.log(this.name + ' move right');}
}// Car类
function Car(){this.name = 'car';this.moveBackward = function(){console.log(this.name + ' move backward');}
}function mixin( receivingClass, givingClass ) {// only provide certain methodsif ( arguments[2] ) {for ( var i = 2, len = arguments.length; i < len; i++ ) {receivingClass[arguments[i]] = givingClass[arguments[i]];}}
}mixin(Car.prototype, controls, 'moveForward');var car = new Car();
car.moveForward() // car move forward
car.moveLeft() //  error:undefined is not a function  

转载于:https://www.cnblogs.com/winderby/p/4325087.html

javascript模式——Mixin相关推荐

  1. 常用的JavaScript模式

    常用的JavaScript模式 模式是解决或者避免一些问题的方案. 在JavaScript中,会用到一些常用的编码模式.下面就列出了一些常用的JavaScript编码模式,有的模式是为了解决特定的问题 ...

  2. 《JavaScript模式》读书笔记一:基本技巧

    <JavaScript模式>的读书笔记,个人向! 更新进度随我的阅读进度 基本技巧 尽量少用全局变量 防止变量污染 注意JS变量提升问题 尽量使用单一var模式,只使用一个var在函数顶部 ...

  3. matlab 上穿,Matlab混入模式(Mixin)

    Matlab混入模式(Mixin) Mixin是一种类,这种类包含了其他类要使用的特性方法,但不必充当其他类的父类.Matlab无疑是支持多继承的.我们可以利用 Matlab 的这种特性,实现一种叫做 ...

  4. 【javascript】javascript设计模式mixin模式

    概述: Mixin是JavaScript中用的最普遍的模式,几乎所有流行类库都会有Mixin的实现.任意一个对象的全部或部分属性拷贝到另一个对象上. 一 .混合对象 二 .混合类 转载于:https: ...

  5. 10个每个开发人员都喜欢的JavaScript模式

    1.构造器模式 在面向对象的编程语言中,构造函数是一种特殊的方法,用于在为其分配了内存后初始化新创建的对象.在JavaScript中,几乎所有东西都是对象,我们最常对对象构造函数感兴趣. 例如,由于对 ...

  6. 《JavaScript模式》精要

    P25. 如何避免eval()定义全局变量? 如: var jsstring = "var un = 1;"; eval(jsstring); console.log(typeof ...

  7. “JavaScript patterns”中译本 - 《JavaScript 模式》第三章

    第三章 直接量和构造函数 JavaScript中的直接量模式更加简洁.富有表现力,且在定义对象时不容易出错.本章将对直接量展开讨论,包括对象.数组和正则表达式直接量,以及为什么要使用等价的内置构造器函 ...

  8. javascript 模式学习篇---基础

    道格拉斯在Javascript精粹中说过,JS身上的坏毛病其实多于好的部分,但是如果我们取其精华去其糟粕,也可以保持JS代码的高效优雅,这要求我们在写js代码的时候遵循特定的模式,初看起来,这个pat ...

  9. Javascript模式阅读笔记 · 简介

    JavaScript是一门基于Web的语言.它最初是作为在网页中操作一些特定类型元素(例如图像和表格字段)的方法,现在该语言的发展已经远远超出了预期.除了作为客户端浏览器所使用的脚本,现在JavaSc ...

最新文章

  1. vs 插件小番茄 visual assist x破解版 破解教程下载
  2. c语言请编写函数mygets,c语言中请编写函数mygets和myputs,其功能分别与gets与puts相同,函数中用getchar和putchar读入和输出字符...
  3. MAC下搭建java的开发环境
  4. 【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”
  5. threejs基础示例
  6. 算法导论-15.5-4
  7. hadoop 压缩工具 比较
  8. 60套模板免费送,一秒搞定甘特图
  9. HeadFirstJava学习心得——javaGUI编程
  10. iOS 统计代码行数
  11. python求梅花数_《梅花易数》又叫梅花数
  12. 小常识:软件常见的各种版本英文缩写
  13. 【第1章】凸集——几种重要的凸集
  14. java 垃圾回收之垃圾回收器篇
  15. 微信群满100人后无法扫码进群?你们要的解决方法来了!
  16. bittorrent端口_如何在Linux防火墙中启用BitTorrent端口?
  17. 神经网络学习(3)————BP神经网络以及python实现
  18. 厦门吾智美:ESS.OIL.CO潜力无限
  19. [附源码]计算机毕业设计Python+uniapp基于Android的校园考勤APPo0400(程序+源码+LW+远程部署)
  20. Flink 任务报错:flink FileNotFoundException: JAR file does not exist: -yn

热门文章

  1. 【Tools】MarkDown教程(二)-MarkDown基本语法
  2. 【Tiny4412】烧写Uboot到EMMC
  3. 如何在 Eclipse 中使用命令行
  4. c 数据压缩算法_CCSDS图像压缩算法之我见(一)
  5. java postdelayed_Android开发使用Handler的PostDelayed方法实现图片轮播功能
  6. 计算机论文指导书,计算机毕业论文指导书.doc
  7. mybatis源码刨析总结
  8. exit()与_exit()函数的区别
  9. 控制台怎么退出mysql_退出mysql控制台与退出mysql
  10. 组数总和—leetcode39