- 通过扩展收集功能的方式。意在:提高函数的复用性。
_.extend(Car.prototype, mixinFucntions), $.extend() 就是 Mixin 的实现方式,即:将方法、属性“混入”构造函数的原型中。
// ------------- 混入函数的模式 Mix-in --------------function mix() { var arg, prop, child = {}; for (arg = 0; arg < arguments.length; arg += 1) { for (prop in arguments[arg]) { if (arguments[arg].hasOwnProperty(prop) { child[prop] = arguments[arg][prop]; } } }}// 深度递归复制function extendDeep(parent, child) { var i, toString = Obejct.prototype.toString, astring = "[Obejct Array]", child = child || {}; for (i in parent) { if (parent.hasOwnProperty(i)) { if (typeof parent[i] === "object") { child[i] = (toString.call(parent[i]) === astring) ? [] : {}; extendDeep(parent[i], child[i]); } else { child[i] = parent[i]; } } } return child;}
- HighLevel Functional Extend
class Component { constructor() {} doWork() {}}const log = (Target) => { return class extends Target { doWork() { super.doWork() } }};const create = (Class, extensions) { let TargetClass = extensions.reduce((Raw, extension) => extension(Raw), Class); return new TargetClass();};let foo = create(Component, [log]);foo.doWork();