锁定老帖子 主题:测试,探讨jMixin模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-05
修正后的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}); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-07-05
大概就是一个参数不传递,什么也不做
传递一个参数,当作args,如果有caller存在,把ths弄到caller再吧args里面参数弄到ths,如果没有caller,直接弄个空对象,把args弄到里面 2个参数,ths就是第一参数对象,把第二参数对象当作args,再吧args弄到ths里 带参数的调用都最后吧ths这个对象反回去 其中还有只有一参数时,如果没有caller还要在这个对象里面弄个jMixin,作者好似就是在打包,打各种各样的包 |
|
返回顶楼 | |
发表时间:2008-07-05
我就是那个作者呀,打包?明明是混入(mixin)呀
|
|
返回顶楼 | |
发表时间:2008-07-06
窃以为无需把各种语言炒作的概念弄到JS里做个实现
而且 不要试图把模式封装成函数或者类 |
|
返回顶楼 | |
发表时间:2008-07-06
csf178 写道 窃以为无需把各种语言炒作的概念弄到JS里做个实现
话是不错。可JS中这个很常见呀就是扩展的另一种形式和实现 csf178 写道 而且 不要试图把模式封装成函数或者类 貌似大家都是这么干的。 我也仅仅尝试一下,有没有意义自己也没谱 |
|
返回顶楼 | |
发表时间:2008-07-06
试图把模式封装成类是很多OO的初学者常犯的错误
就好像在Java中写一个DesignPatterns包一样 呵呵 遗憾的是 JS中 很多"知名框架"也在犯这个错误 这导致了更多的新手被误导 像prototype.js中的Class就是很明显的例子 我也只是提醒楼主一下 希望你能设计的角度去思考一下 应该如何实现你想要的东西 |
|
返回顶楼 | |
发表时间:2008-07-06
csf178 写道 试图把模式封装成类是很多OO的初学者常犯的错误
就好像在Java中写一个DesignPatterns包一样 呵呵 遗憾的是 JS中 很多"知名框架"也在犯这个错误 这导致了更多的新手被误导 像prototype.js中的Class就是很明显的例子 我也只是提醒楼主一下 希望你能设计的角度去思考一下 应该如何实现你想要的东西 我就是对这个模糊才自己做试验的,你这一提醒,我倒是要思考一下了。 能给几个这方面对比,批判的文章地址么? |
|
返回顶楼 | |
发表时间:2008-07-06
csf178 写道 试图把模式封装成类是很多OO的初学者常犯的错误
就好像在Java中写一个DesignPatterns包一样 呵呵 遗憾的是 JS中 很多"知名框架"也在犯这个错误 这导致了更多的新手被误导 像prototype.js中的Class就是很明显的例子 我也只是提醒楼主一下 希望你能设计的角度去思考一下 应该如何实现你想要的东西 Class继承得到普遍的接受,这是毋庸置疑的。有诸多的js中的class继承实现,也说明了开发者的需要。不仅“知名框架”几乎都干这个事情,ES4也加入了Class。所以尽管有一小撮人坚信js可以不需要class继承(请勿怀疑其实偶也是这一小撮人之一),但是历史车轮是无法阻挡的。 |
|
返回顶楼 | |
发表时间:2008-07-06
js不需要class,但是大规模编程好似不能没有class,class的包装始终比原型动态this后绑定清晰
|
|
返回顶楼 | |
发表时间:2008-07-07
hax 写道 csf178 写道 试图把模式封装成类是很多OO的初学者常犯的错误
就好像在Java中写一个DesignPatterns包一样 呵呵 遗憾的是 JS中 很多"知名框架"也在犯这个错误 这导致了更多的新手被误导 像prototype.js中的Class就是很明显的例子 我也只是提醒楼主一下 希望你能设计的角度去思考一下 应该如何实现你想要的东西 Class继承得到普遍的接受,这是毋庸置疑的。有诸多的js中的class继承实现,也说明了开发者的需要。不仅“知名框架”几乎都干这个事情,ES4也加入了Class。所以尽管有一小撮人坚信js可以不需要class继承(请勿怀疑其实偶也是这一小撮人之一),但是历史车轮是无法阻挡的。 错误不在class继承 也不在于将class继承在JS中实现 而在于将class继承封装为XX |
|
返回顶楼 | |