最近在学习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
...
};
});