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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值