Authored by weiqingting

delete model

1 -function buildClass(){  
2 - /*变量*/  
3 - var supr = this,  
4 - parms=[].slice.call(arguments)||[],  
5 - toString={}.toString,  
6 - slice=[].slice,  
7 - __step="__";  
8 -  
9 - /*方法*/  
10 - function __getType(value){  
11 - if(["boolean","string","number","undefined"].indexOf((typeof value).toLowerCase())>-1){  
12 - return (typeof value).toLowerCase();  
13 - }  
14 - return toString.call(value).replace(/\[object\s*([^\]]+)\s*\]/,'$1').toLowerCase();  
15 - };  
16 - function __isFun(value){  
17 - return typeof value=="function";  
18 - };  
19 - function __isStr(value){  
20 - return typeof value=="string";  
21 - };  
22 - function __isBoolen(value){  
23 - return typeof value=="boolean";  
24 - }  
25 - function __upName(name){  
26 - return name.charAt(0).toUpperCase()+name.substring(1);  
27 - };  
28 -  
29 - function __lowerName(name){  
30 - return "__"+name+"__";  
31 - };  
32 - function __build(items,callback){  
33 - if(toString.call(items)!=="[object Array]"){  
34 - items=[items];  
35 - }  
36 - while(item=items.shift()){  
37 - for(var key in item){  
38 - if(item.hasOwnProperty(key)){  
39 - callback&&callback(item[key],key);  
40 - }  
41 - }  
42 - }  
43 - };  
44 - function __error(value){  
45 - return {code:200,message:value};  
46 - };  
47 - function __guid(){  
48 - return Date.now()+Math.random().toString(36).substring(2, 15);  
49 - };  
50 - function __validate(isval,value,name){  
51 - if(__isBoolen(isval)&&isval&&this.__validations__[name]){  
52 - if(__getType(value)!=this.__feild__[name].type){  
53 - throw __error(name+" type error");  
54 - }  
55 - if(!this.__validations__[name].call(this)){  
56 - throw __error(name+" validate error");  
57 - }  
58 - }  
59 - }  
60 -  
61 - var __rule={  
62 - require:function(value,rules){  
63 - return Boolean(value.replace(/^\s+|\s+$/,''));  
64 - },  
65 - ranges:function(value,rules){  
66 - return new RegExp("^["+rules+"]*$").test(value);  
67 - },  
68 - length:function(value,rules){  
69 - var r=rules.split(',');  
70 - if(r[0]&&value.length<r[0]){  
71 - return false;  
72 - }  
73 - if(r[1]&&value.length>r[1]){  
74 - return false;  
75 - }  
76 - return true;  
77 - },  
78 - type:function(value,type){  
79 -  
80 - }  
81 - }  
82 -  
83 -  
84 - function customClass(){};  
85 - customClass.prototype=this.prototype;  
86 - customClass.prototype.__validations__={};  
87 - var prototype=new customClass();  
88 -  
89 -  
90 - function subClass(obj){  
91 - var that=this;  
92 -  
93 - for(var name in that.__feild__){  
94 - if(that.__feild__.hasOwnProperty(name)){  
95 - that[name]=(obj&&obj[name])||that.__feild__[name].value;  
96 - }  
97 - }  
98 -  
99 - }  
100 -  
101 - subClass.__create=function(parms){  
102 - var isValObj=false,  
103 - me=this;  
104 - while(parm=parms.shift()){  
105 - if(!isValObj){  
106 - //验证规则  
107 - __build(parm,function(obj,name){  
108 -  
109 - var verify=prototype.__validations__;  
110 -  
111 - if(!prototype.__feild__.hasOwnProperty(name)){  
112 - return;  
113 - }  
114 -  
115 - if(__isFun(obj)){  
116 - verify[name]=(function(obj){  
117 - return function(){  
118 - return Boolean(obj.apply(this,arguments));  
119 - }  
120 - })(obj);  
121 - }else if(__isStr(obj)){  
122 - if(/^@\{[^}]+\}[img]{0,1}/.test(obj)){  
123 - var rules=obj.match(/^@\{([^}]+)\}([img]{0,1})/);  
124 - var regex=new RegExp(rules[1],rules[2]);  
125 - verify[name]=function(){  
126 - return regex.test(this[name]);  
127 - }  
128 - }else{  
129 - validateObj[name]=function(){  
130 - var items=obj.split('.'),item;  
131 - while(item=items.shift()){  
132 - var parms=item.match(/([^(]+)(\(([^)]+)\))?/);  
133 - if(!__rule[parms[1]](this[name].value,prototype[__lowerName(name)].type,parms[3])){  
134 - return false;  
135 - }  
136 - }  
137 - return true;  
138 - }  
139 - }  
140 - }else{  
141 - throw "error";  
142 - }  
143 - });  
144 - isValObj=true;  
145 - continue;  
146 - }  
147 - __build(parm,function(obj,key){  
148 - if(__isFun(obj)){  
149 - prototype[key]=(function(parm,key){  
150 - return function(){  
151 - return parm[key].apply(this,arguments);  
152 - }  
153 - })(parm,key)  
154 - }else{  
155 - prototype[key]=parm[key];  
156 - }  
157 - });  
158 - }  
159 - this.prototype=prototype;  
160 - return this;  
161 - };  
162 - subClass.__create.call(subClass,parms).prototype.constructor=subClass;  
163 -  
164 - //对象构造器  
165 - subClass.define=function(obj,fn){  
166 -  
167 - var that=subClass.prototype;  
168 - that.__feild__={};  
169 -  
170 - obj=typeof obj==="string"?(function(){  
171 - var o={};  
172 - o[obj]=fn;  
173 - return o;  
174 - }):obj;  
175 -  
176 - __build([obj["__proto__"],obj],function(obj,name){  
177 - var prototype=that,guid=__guid();  
178 - prototype.__feild__[name]={  
179 - type:__getType(obj),  
180 - value:obj,  
181 - origin:name  
182 - };  
183 - prototype["get"+__upName(name)]=(function(name){  
184 - return function(){  
185 - // var args=slice.call(arguments,0);  
186 - // __validate.call(this,args[0],name);  
187 - return this[name];  
188 - }  
189 - })(name);  
190 - prototype["set"+__upName(name)]=(function(name){  
191 - return function(value){  
192 - var args=slice.call(arguments,0);  
193 - __validate.call(this,args[1],args[0],name);  
194 - this[name]=args[0];  
195 - }  
196 - })(name);  
197 - });  
198 - return this;  
199 - };  
200 -  
201 - /*构建Class*/  
202 - subClass.extend=arguments.callee;  
203 - return subClass;  
204 -}  
205 -exports.module=function(obj){  
206 - return buildClass.call(obj||function(){});  
207 -}  
208 -  
209 -  
210 -/*  
211 -var LClass=new BuildClass();  
212 -  
213 -var UserClass=LClass.define({  
214 - firstName:String("wei"),  
215 - lastName:String("qingting"),  
216 - list:Array()  
217 -}).extend({  
218 - // 1. 规则 2.正则 3.方法  
219 - firstName:"require.ranges(1-9).length(1,10)",  
220 - lastName:"@{^\\w+$}",  
221 - list:function(){  
222 - if(this.getList().length==0){  
223 - return false;  
224 - }else{  
225 - return true;  
226 - }  
227 - }  
228 -},{  
229 - sex:"男",  
230 - fullName:function(){  
231 - return this.getFirstName()+this.getLastName();  
232 - }  
233 -});  
234 -  
235 -var u=new UserClass({lastName:"lan"});  
236 -try{  
237 - u.setLastName(1,true)  
238 - console.log(u.getLastName());  
239 -}  
240 -catch(ex){  
241 - console.log(ex);  
242 -}*/