zoukankan      html  css  js  c++  java
  • (转)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;   
    };  
  • 相关阅读:
    Jmeter使用csv文件读取测试数据
    postman入门教程
    VS code 踩坑
    一些安装链接
    Maven笔记
    c++
    更新windows补丁时一直卡在搜索更新
    Java程序设计(第二版)复习 第三章
    Java程序设计(第二版)复习 第二章
    CSS基础一
  • 原文地址:https://www.cnblogs.com/jenry/p/1753555.html
Copyright © 2011-2022 走看看