Showing
1 changed file
with
0 additions
and
242 deletions
library/mclass.js
deleted
100644 → 0
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 | -}*/ |
-
Please register or login to post a comment