mixin可以轻松被一个子类或者一组子类继承,目的是函数复用。在js中,我们可以将继承MiXin看作为一种通过扩展收集功能的方式。
e.mixin = function(t) { for (var i in e.prototype) t[i] = e.prototype[i]; //调用该模块,t继承了e.prototype的方法, return t }
而e.prototype写法是:
function e() {} var j = e.prototype; return j.on = function(e, t) {},j.emit =function(e,t){},j //引用,e.prototype中的方法都是j的方法,即实现了继承。
这样就可以在任何模块中扩展其他模块的方法,并且在其他模块中直接调用扩展的方法, 下面是一个简单的ximin模式写法
function A(x){ this.x = x; } A.prototype.setA = function(){console.log("coming in a");} A.prototype.setB = function(){console.log("coming in b");} A.mixin = function(t){ for(key in A.prototype){ t[key] = A.prototype[key]; } } var b= {}; A.mixin(b); b.setA(); //coming in a
在JS中,提供了一个mixin函数,叫__proto__
var proto ={}; var mixin = {"x":"y"}; proto.__proto__ = mixin; console.log(proto.x); //y
小结:mixin设计模式非常像拷贝继承,简单说,把父对象的所有属性和方法,拷贝进子对象,扩展方法,都是从父对象来扩展方法。