JS -- ORM 原理和实现过程

 <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>

 

posted @ 2012-12-28 00:58  ﹏Sakura  阅读(1444)  评论(0编辑  收藏  举报