• 通过扩展收集功能的方式。意在:提高函数的复用性。
    • _.extend(Car.prototype, mixinFucntions), $.extend() 就是 Mixin 的实现方式,即:将方法、属性“混入”构造函数的原型中。
    1. // ------------- 混入函数的模式 Mix-in --------------
    2. function mix() {
    3. var arg, prop, child = {};
    4. for (arg = 0; arg < arguments.length; arg += 1) {
    5. for (prop in arguments[arg]) {
    6. if (arguments[arg].hasOwnProperty(prop) {
    7. child[prop] = arguments[arg][prop];
    8. }
    9. }
    10. }
    11. }
    12. // 深度递归复制
    13. function extendDeep(parent, child) {
    14. var i,
    15. toString = Obejct.prototype.toString,
    16. astring = "[Obejct Array]",
    17. child = child || {};
    18. for (i in parent) {
    19. if (parent.hasOwnProperty(i)) {
    20. if (typeof parent[i] === "object") {
    21. child[i] = (toString.call(parent[i]) === astring) ? [] : {};
    22. extendDeep(parent[i], child[i]);
    23. } else {
    24. child[i] = parent[i];
    25. }
    26. }
    27. }
    28. return child;
    29. }
    1. class Component {
    2. constructor() {}
    3. doWork() {}
    4. }
    5. const log = (Target) => {
    6. return class extends Target { doWork() { super.doWork() } }
    7. };
    8. const create = (Class, extensions) {
    9. let TargetClass = extensions.reduce((Raw, extension) => extension(Raw), Class);
    10. return new TargetClass();
    11. };
    12. let foo = create(Component, [log]);
    13. foo.doWork();