论坛首页 Web前端技术论坛

测试,探讨jMixin模式

浏览 4711 次
精华帖 (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});
 
   发表时间:2008-07-05  
大概就是一个参数不传递,什么也不做
传递一个参数,当作args,如果有caller存在,把ths弄到caller再吧args里面参数弄到ths,如果没有caller,直接弄个空对象,把args弄到里面
2个参数,ths就是第一参数对象,把第二参数对象当作args,再吧args弄到ths里
带参数的调用都最后吧ths这个对象反回去
其中还有只有一参数时,如果没有caller还要在这个对象里面弄个jMixin,作者好似就是在打包,打各种各样的包
0 请登录后投票
   发表时间:2008-07-05  
我就是那个作者呀,打包?明明是混入(mixin)呀
0 请登录后投票
   发表时间:2008-07-06  
窃以为无需把各种语言炒作的概念弄到JS里做个实现
而且 不要试图把模式封装成函数或者类
0 请登录后投票
   发表时间:2008-07-06  
csf178 写道
窃以为无需把各种语言炒作的概念弄到JS里做个实现

话是不错。可JS中这个很常见呀就是扩展的另一种形式和实现
csf178 写道

而且 不要试图把模式封装成函数或者类

貌似大家都是这么干的。
我也仅仅尝试一下,有没有意义自己也没谱
0 请登录后投票
   发表时间:2008-07-06  
试图把模式封装成类是很多OO的初学者常犯的错误
就好像在Java中写一个DesignPatterns包一样 呵呵
遗憾的是 JS中 很多"知名框架"也在犯这个错误 这导致了更多的新手被误导
像prototype.js中的Class就是很明显的例子

我也只是提醒楼主一下 希望你能设计的角度去思考一下 应该如何实现你想要的东西
0 请登录后投票
   发表时间:2008-07-06  
csf178 写道
试图把模式封装成类是很多OO的初学者常犯的错误
就好像在Java中写一个DesignPatterns包一样 呵呵
遗憾的是 JS中 很多"知名框架"也在犯这个错误 这导致了更多的新手被误导
像prototype.js中的Class就是很明显的例子

我也只是提醒楼主一下 希望你能设计的角度去思考一下 应该如何实现你想要的东西

我就是对这个模糊才自己做试验的,你这一提醒,我倒是要思考一下了。
能给几个这方面对比,批判的文章地址么?
0 请登录后投票
   发表时间:2008-07-06  
csf178 写道
试图把模式封装成类是很多OO的初学者常犯的错误
就好像在Java中写一个DesignPatterns包一样 呵呵
遗憾的是 JS中 很多"知名框架"也在犯这个错误 这导致了更多的新手被误导
像prototype.js中的Class就是很明显的例子

我也只是提醒楼主一下 希望你能设计的角度去思考一下 应该如何实现你想要的东西


Class继承得到普遍的接受,这是毋庸置疑的。有诸多的js中的class继承实现,也说明了开发者的需要。不仅“知名框架”几乎都干这个事情,ES4也加入了Class。所以尽管有一小撮人坚信js可以不需要class继承(请勿怀疑其实偶也是这一小撮人之一),但是历史车轮是无法阻挡的。
0 请登录后投票
   发表时间:2008-07-06  
js不需要class,但是大规模编程好似不能没有class,class的包装始终比原型动态this后绑定清晰
0 请登录后投票
   发表时间:2008-07-07  
hax 写道
csf178 写道
试图把模式封装成类是很多OO的初学者常犯的错误
就好像在Java中写一个DesignPatterns包一样 呵呵
遗憾的是 JS中 很多"知名框架"也在犯这个错误 这导致了更多的新手被误导
像prototype.js中的Class就是很明显的例子

我也只是提醒楼主一下 希望你能设计的角度去思考一下 应该如何实现你想要的东西


Class继承得到普遍的接受,这是毋庸置疑的。有诸多的js中的class继承实现,也说明了开发者的需要。不仅“知名框架”几乎都干这个事情,ES4也加入了Class。所以尽管有一小撮人坚信js可以不需要class继承(请勿怀疑其实偶也是这一小撮人之一),但是历史车轮是无法阻挡的。

错误不在class继承 也不在于将class继承在JS中实现 而在于将class继承封装为XX
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics