从prototype.js中学习到的js封装

最近在学习prototype.js,发现这里面的代码适合像我这种初学者(使用过一些库和框架,并用一些框架写过一些项目的人)学习,下面从源码截取一些面向对象封装的代码用于学习。

1、给Object的原型添加extend方法,功能是对象的扩展,把一个对象的值赋值给源对象,如果源对象存在属性,则修改,这种方法以前在jQuery中经常用到

Object.prototype.extend=function(object){
for(property in object){
this[property]=object[property];
}
//return this;
};

a.extend(b);

2、创建一个带构造函数的类型,在当时看到这段代码时,不是很好理解

var Class = {
   create: function() {
              return function() {
                    this.initialize.apply(this, arguments);
             }
    }
};

//调用

//首先通过new创建一个myClass,返回的是一个函数,

//给函数添加prototype方法initialize

var myClass=Class.create();
myClass.prototype={
          initialize:function(){
               alert("IS Create ");
          }
};

//new myClass时执行这行语句this.initialize.apply(this, arguments),调用initialize方法。

var b=new myClass();//弹出IS Creste

2、给String添加原型方法

Object.extend(String.prototype, (function() {

function empty() {
return this == '';
}

return {
empty:empty
};
})());

//可以

'abc'.empty();

3、给Array添加原型方法

(function() {
   var arrayProto = Array.prototype;

   function size() {
        return this.length;
   }

   Object.extend(arrayProto, {
        size: size
   });

});

4、给Date添加原型方法

(function(proto) {

  function toISOString() {
      return this.getUTCFullYear() + '-' +
          (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
          this.getUTCDate().toPaddedString(2) + 'T' +
          this.getUTCHours().toPaddedString(2) + ':' +
          this.getUTCMinutes().toPaddedString(2) + ':' +
          this.getUTCSeconds().toPaddedString(2) + 'Z';
  }

  function toJSON() {
       return this.toISOString();
  }

  if (!proto.toISOString) proto.toISOString = toISOString;
  if (!proto.toJSON) proto.toJSON = toJSON;

}); 

5、创建一个新的类型

var Enumerable = (function() {

function each(){

 

}

funciton ...

return {
each: each

...
};

});

 

posted @ 2015-12-13 19:47  话里  阅读(2064)  评论(0编辑  收藏  举报