最近在學習prototype.js,發現這裏面的代碼適合像我這種初學者(使用過一些庫和框架,並用一些框架寫過一些項目的人)學習,下面從源碼截取一些面向對象封裝的代碼用於學習。app
一、給Object的原型添加extend方法,功能是對象的擴展,把一個對象的值賦值給源對象,若是源對象存在屬性,則修改,這種方法之前在jQuery中常常用到框架
Object.prototype.extend=function(object){
for(property in object){
this[property]=object[property];
}
//return this;
};函數
a.extend(b);學習
二、建立一個帶構造函數的類型,在當時看到這段代碼時,不是很好理解this
var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
};prototype
//調用rest
//首先經過new建立一個myClass,返回的是一個函數,對象
//給函數添加prototype方法initializeci
var myClass=Class.create();
myClass.prototype={
initialize:function(){
alert("IS Create ");
}
};get
//new myClass時執行這行語句this.initialize.apply(this, arguments),調用initialize方法。
var b=new myClass();//彈出IS Creste
二、給String添加原型方法
Object.extend(String.prototype, (function() {
function empty() {
return this == '';
}
return {
empty:empty
};
})());
//能夠
'abc'.empty();
三、給Array添加原型方法
(function() {
var arrayProto = Array.prototype;
function size() {
return this.length;
}
Object.extend(arrayProto, {
size: size
});
});
四、給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;
});
五、建立一個新的類型
var Enumerable = (function() {
function each(){
}
funciton ...
return {
each: each
...
};
});