(转)OpenLayers基类文件Class.js(五)

此文件包含OpenLayers.Class类,此类为OpenLayers整个框架的基类,被用来继承构造其它子类,实现了多重继承。

创建一个新类,用下面的语法:

var MyClass = OpenLayers.Class(prototype);

 如果多重继承,使用如下: 

var MyClass = OpenLayers.Class(Class1, Class2, prototype);

 网上有人分析的不错,转之。代码如下:

代码
//创建一个类,相当于java中的class定义一个类   
OpenLayers.Class = function() {   
    
//这个Class作为一个匿名函数返回,其构造函数中会调用initalize()函数   
    var Class = function() {   
        
if (arguments && arguments[0!= OpenLayers.Class.isPrototype) {   
            
this.initialize.apply(this, arguments);   
        }   
    };   
    
//这个是Class的prototype所指向的对象   
    var extended = {};   
    
//parent是父类,initialize是父类的initialize方法   
    var parent, initialize;   
    
//循环参数列表   
    for(var i=0, len=arguments.length; i<len; ++i) {   
        
if(typeof arguments[i] == "function") {   
            
//如果第一参数是function类型,则说明第一参数是父类   
            if(i == 0 && len > 1) {   
                
//下面几行代码挺绕的,其实就是子类在继承父类的时候不想调用父类的initialize方法。因为只要继承父类的其他属性就行了,至于initialize方法自己可以覆盖,然后调用父类的initialize方法。   
                initialize = arguments[i].prototype.initialize;   
                arguments[i].prototype.initialize 
= function() {};   
                extended 
= new arguments[i];   
                
if(initialize === undefined) {   
                    
delete arguments[i].prototype.initialize;   
                } 
else {   
                    arguments[i].prototype.initialize 
= initialize;   
                }   
            }   
            
//如果是函数类型,但不是第一个参数,则把函数的prototype所指向的对象赋给parent   
            parent = arguments[i].prototype;   
        } 
else {   
            
//这个是对象啦,直接赋值就行了   
            parent = arguments[i];   
        }   
        
//来个浅拷贝,齐活!   
        OpenLayers.Util.extend(extended, parent);   
    }   
    
//把Class函数对象的prototype指向这个extended对象,这样在以后谁new这个Class函数对象的时候,其原型自动指向extended对象。   
    Class.prototype = extended;   
    
//返回这个Class函数对象,这样这个函数名就不叫Class了,你起的是啥名字就叫啥。自此一个类就定义出来了!   
    return Class;   
};   
//下面的这些函数都过时了,3.0删除   
OpenLayers.Class.isPrototype = function () {};   
OpenLayers.Class.create 
= function() {   
    
return function() {   
        
if (arguments && arguments[0!= OpenLayers.Class.isPrototype) {   
            
this.initialize.apply(this, arguments);   
        }   
    };   
};   
OpenLayers.Class.inherit 
= function () {   
    
var superClass = arguments[0];   
    
var proto = new superClass(OpenLayers.Class.isPrototype);   
    
for (var i=1, len=arguments.length; i<len; i++) {   
        
if (typeof arguments[i] == "function") {   
            
var mixin = arguments[i];   
            arguments[i] 
= new mixin(OpenLayers.Class.isPrototype);   
        }   
        OpenLayers.Util.extend(proto, arguments[i]);   
    }   
    
return proto;   
};  

 

 

posted @ 2010-06-07 23:14  bigwhiteshark(云飞扬)  阅读(1473)  评论(0编辑  收藏  举报