| function createElement(parent,child,params){ |
| if(child){ |
| child.prototype = Object.create(parent.prototype); |
| child.prototype.constructor = child; |
| child.prototype.parent = parent.prototype; |
| }else{ |
| var instance = Object.create(parent.prototype,params); |
| var getType = {}; |
| if(instance && getType.toString.call(instance.init) === '[object Function]'){ |
| instance.init(); |
| } |
| return instance; |
| } |
| } |
| |
| function defineDescriptor(o, propertyName, value, params){ |
| var descriptor = { |
| writable : false, |
| configurable : false, |
| enumerable : false, |
| value : value |
| }; |
| if(params){ |
| for( var s in params){ |
| descriptor[s] = params[s]; |
| } |
| } |
| var getType = {}; |
| if(o && getType.toString.call(o) === '[object Function]'){ |
| o = o.prototype; |
| } |
| Object.defineProperty(o, propertyName, descriptor); |
| } |
| |
| function defineAccessor(o, propertyName, params){ |
| var value; |
| var accessor = { |
| enumerable : false, |
| configurable : false, |
| get: function(){return value}, |
| set: function(val){value = val} |
| }; |
| if(params){ |
| for( var s in params){ |
| accessor[s] = params[s]; |
| } |
| } |
| var getType = {}; |
| if(o && getType.toString.call(o) === '[object Function]'){ |
| o = o.prototype; |
| } |
| Object.defineProperty(o, propertyName, accessor); |
| } |