<script type=text/javascript src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" /></script> <script type="text/javascript"> if(typeof Object.create !== "function"){ Object.create = function(o){ function _F(){} _F.prototype = o; return new _F(); } } var Model = { inherited:function(){}, created:function(){ this.records = {}; }, prototype:{ init:function(){} }, create:function(){ var obj = Object.create(this); obj.parent = this; obj.prototype = obj.fn = Object.create(this.prototype); obj.created(); this.inherited(obj); return obj; }, init:function(){ var instance = Object.create(this.prototype); instance.parent = this; instance.init.apply(instance,arguments); return instance; }, include:function(o){ var include = o.included; jQuery.extend(this.prototype,o); if(include) include(this); }, extend:function(o){ var extend = o.extended; jQuery.extend(this,o); if(extend) extend(this); } }; Model.include({ init:function(attr){ if(attr) for(var name in attr) this[name] = attr[name]; } }); Math.guid = function(){ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c){ var r = Math.random() * 16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); }).toUpperCase(); } //Model.records = {}; Model.include({ newRecord:true, create:function(){ this.newRecord = false; this.id = this.id || Math.guid(); this.parent.records[this.id] = this; }, update:function(){ this.parent.records[this.id] = this; }, destory:function(){ delete this.parent.records[this.id]; }, save:function(){ this.newRecord ? this.create() : this.update(); }, find:function(id){ return this.records[id] || {}; }, population:function(result){ this.records = {}; for(var i = 0; len = result.length; i< len ; i++){ var record = this.init(result[i]); record.newRecord = false; this.record[record.id] = record; } } }); var User = Model.create(); var user = User.init({name:'xiaojiang',age:25}); user.save(); console.dir(user); </script>