修正后的Mixin
function inMixin(){ var ths=this,i=0; if (ths==window){ ths=arguments[0];i=1; } if(ths==null) throw "this is undefined"; if(i==arguments.length){ ths.mixin=inMixin; return ths; } for (;i<arguments.length ;i++){ for (var a in arguments[i]){ ths[a]=arguments[i][a]; } } return ths; }
需要说明的是Mixin模式是完全不同于prototype的,甚至是天生排斥原型定义方法的,我很难说清楚我为什么要这样干.
还是那句话:测试,探讨
===============下面是最初的文章==========================
首先,我自己都不知道自己想要什么结果,测试了之后才知道有没有价值.
var jMixin = function(){ if (arguments.length>2) return; var ths=this; var callee=arguments.callee; var caller=arguments.callee.caller; if (arguments.length==0) { ths.jMixin=callee; return; } if (arguments.length==1){ var args=arguments[0]; if (caller!==null) ths = caller; }else{ ths=arguments[0]; var args=arguments[1]; } if (ths==window || ths==undefined) ths={}; if (arguments.length==1 && caller==null) ths.jMixin=callee; for(var prop in args) ths[prop]=args[prop]; return ths; } var o=jMixin(); jMixin(o,{c:2}); var oo=jMixin({o:1}); jMixin(oo,{c:2}); var o2=jMixin(o); var foo={}; jMixin(foo,{c:2}); var foonewnone=new jMixin(); var foonew=new jMixin(o); var foonew2=new foonew.jMixin({c:5});