protoype.js學習(二)
??????最近一直在看prototype.js的源代碼,個人覺得Enumerable的each()最難理解。今天大概看明白了,

1、Enumerable
??????
//定義了兩個異常對象,主要用于迭代控制
var?$break?=?new?Object();
var?$continue?=?new?Object();
/**
?*?Enumerable可以看作一個接口,_each(function(value))則看作接口中定義的定義的抽象方法
?*?_each是由Enumerable的繼承類Array實現的.
?*?_each中的參數是個函數,即迭代器
?*?????????????????function(value)?{
?*????????????????try?{
?*????????????????????iterator(value,?index++);
?*????????????????????}?catch?(e)?{
?*????????????????????if?(e?!=?$continue)?throw?e;
?*????????????????????}
?*????????????????}
?*?????將實際的迭代器作為參數傳遞給Array中定義的_each()方法
?*??? index計數器的作用是用于告訴迭代器當前執行到第幾個元素
?*/
var?Enumerable?=?{
????each:?function(iterator)?{
????????var?index?=?0;
????????try?{
????????????this._each(function(value)?{
????????????????try?{
????????????????????iterator(value,?index++);
????????????????}?catch?(e)?{
????????????????????if?(e?!=?$continue)?throw?e;//執行function(value,index)時;
????????????????????????????????????????????????//如遇異常則拋出($continue為實例化的一個對象,此處意在表明繼續執行下一次操作)
????????????????????
????????????????}
????????????});
????????}?catch?(e)?{
????????????if?(e?!=?$break)?throw?e;//執行_each遍歷時如遇異常則拋出($break為實例化的一個對象,
????????????????????????????????????????????????//此處意在表明退出循環,結束遍歷)
????????}
????},
? //........
}
var?$break?=?new?Object();
var?$continue?=?new?Object();
/**
?*?Enumerable可以看作一個接口,_each(function(value))則看作接口中定義的定義的抽象方法
?*?_each是由Enumerable的繼承類Array實現的.
?*?_each中的參數是個函數,即迭代器
?*?????????????????function(value)?{
?*????????????????try?{
?*????????????????????iterator(value,?index++);
?*????????????????????}?catch?(e)?{
?*????????????????????if?(e?!=?$continue)?throw?e;
?*????????????????????}
?*????????????????}
?*?????將實際的迭代器作為參數傳遞給Array中定義的_each()方法
?*??? index計數器的作用是用于告訴迭代器當前執行到第幾個元素
?*/
var?Enumerable?=?{
????each:?function(iterator)?{
????????var?index?=?0;
????????try?{
????????????this._each(function(value)?{
????????????????try?{
????????????????????iterator(value,?index++);
????????????????}?catch?(e)?{
????????????????????if?(e?!=?$continue)?throw?e;//執行function(value,index)時;
????????????????????????????????????????????????//如遇異常則拋出($continue為實例化的一個對象,此處意在表明繼續執行下一次操作)
????????????????????
????????????????}
????????????});
????????}?catch?(e)?{
????????????if?(e?!=?$break)?throw?e;//執行_each遍歷時如遇異常則拋出($break為實例化的一個對象,
????????????????????????????????????????????????//此處意在表明退出循環,結束遍歷)
????????}
????},
? //........
}
2、Array ,繼承Enumerable,并實現了Enumerable方法_each().
????????????
/**
?????*?iterator是作為參數傳入的,實際使用的是哪個函數或對象的方法是根據給定對象的性質決定的
?????*?iterator是個函數類型的參數,每個具體的對象將實際的迭代器作為函數作為參數傳入
?????*?_each:?function(iterator)是Enumerable中定義方法的實現
?????*/
Object.extend(Array.prototype,?{
????_each:?function(iterator)?{
????????for?(var?i?=?0;?i?<?this.length;?i++)
????????????iterator(this[i]);
????},
???//
}
?????*?iterator是作為參數傳入的,實際使用的是哪個函數或對象的方法是根據給定對象的性質決定的
?????*?iterator是個函數類型的參數,每個具體的對象將實際的迭代器作為函數作為參數傳入
?????*?_each:?function(iterator)是Enumerable中定義方法的實現
?????*/
Object.extend(Array.prototype,?{
????_each:?function(iterator)?{
????????for?(var?i?=?0;?i?<?this.length;?i++)
????????????iterator(this[i]);
????},
???//

}