- 通过扩展收集功能的方式。意在:提高函数的复用性。
_.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();