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>

 

你可能感兴趣的:(orm)