锁定老帖子 主题:测试,探讨jMixin模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-08
继续,仍然是实验目的,意义我自己还没有发现. 看上去就是把new 实例和属性给融合覆盖了.什么地方可以用到这种东西呢?
function jMixin(){ var ths=this; var callee=arguments.callee; var caller=arguments.callee.caller; if (0==arguments.length) { var args=[]; if (caller) ths = caller; }else if (1==arguments.length){ var args=arguments[0]; if (caller) ths = caller; }else if (2==arguments.length){ ths=arguments[0]; var args=arguments[1]; } if (!ths || ths==window) ths={}; if (!ths.jMixin) ths.jMixin=callee; for(var prop in args) { if (prop=='prototype') continue; ths[prop]=args[prop]; } if (args.prototype) { var n = new args; for(var prop in n){ if (prop=='prototype') continue; ths[prop]=n[prop]; } } return ths; } |
|
返回顶楼 | |
发表时间:2008-11-03
现在仍然是探索阶段,不过我好像找到一些感觉了.
var func=inMixin(function(){ alert('by inMixin'); },{ foo:22 }); var o1={ddd:333}; var o2=inMixin({},o1,func);//千万不能写成var o2=inMixin(o1,func);这样就是在对o1进行扩展了 |
|
返回顶楼 | |
发表时间:2009-05-27
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; } var func=inMixin(function(){ alert('by inMixin'); },{ foo:22 }); //func为inMixin生成的新类, //它的构造函数 alert(func.prototype.constructor) //它的实例属性 alert(func.foo) alert("====================") var _func = new func(); //非常可惜,foo并没有继承下来,并非prototype属性 alert("====================") alert(_func.foo) alert("====================") var class1={method:"I'm a method of class1"}; var class2=inMixin({},class1,func) alert(class2.prototype.constructor); alert(class2.method) alert("--------------------------------") var _class2 = new class2();//失败鸟!因为_class2并没有constuctor! alert("--------------------------------") alert(_class2.method)//失败了 |
|
返回顶楼 | |
发表时间:2009-05-27
最后修改:2009-05-27
inMixin()返回并不都是构造函数,应该保证construtor指向自身!
如果成功的话,就有java的接口继承的意义了! |
|
返回顶楼 | |
发表时间:2009-05-28
司徒正美 写道 inMixin()返回并不都是构造函数,应该保证construtor指向自身!
如果成功的话,就有java的接口继承的意义了! 好像我们讨论的不是一回事呀 inMixin是排斥 new 方法的,纯粹用的扩展 |
|
返回顶楼 | |