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 != $continuethrow e;//执行function(value,index)时;
                                                
//如遇异常则抛出($continue为实例化的一个对象,此处意在表明继续执行下一次操作)
                    
                }
            });
        } 
catch (e) {
            
if (e != $breakthrow 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]);
    },
   
//
}
posted on 2006-12-19 16:07 windfree 阅读(425) 评论(0)  编辑  收藏 所属分类: javascriptajax

只有注册用户登录后才能发表评论。


网站导航: