OpenLayers 2 源码解读(2) Class.js

来源:互联网 发布:淘宝客返利网址 编辑:程序博客网 时间:2024/05/22 10:56

js中并没有所谓的命名空间概念,所谓的命名空间就是通过js对象的属性来模拟实现的。
ol2的顶级命名空间就是OpenLayers,可以在SingleFile.js中看到,所以说,这个文件的加载顺序一定是在最前面。

Class.js 中定义了ol2的采用的继承关系是如何实现的
//定义了所有的继承关系实现方式,通过调用OpenLayers.Class方法,来实现对象的继承

OpenLayers.Class = function() {//定义了所有的对象实现,传入的第一个参数为父对象,最后一个参数为该类的实现    var len = arguments.length;    var P = arguments[0];    var F = arguments[len-1];//定义子类的构造函数名称initialize//新建对象时,首先会执行initialize方法;如果没有的话,则执行父对象的initialize方法,沿着这个链向上寻找,知道找到,当然顶级的对象,必须有定义initialize方法    var C = typeof F.initialize == "function" ?        F.initialize :        function(){ P.prototype.initialize.apply(this, arguments); };    if (len > 1) {//实现子对象能够访问父对象的属性及方法        var newArgs = [C, P].concat(                Array.prototype.slice.call(arguments).slice(1, len-1), F);        OpenLayers.inherit.apply(null, newArgs);    } else {//返回的对象的原型指向自定义的对象(最后一个参数)        C.prototype = F;    }    return C;};

//如果值是function类型的,则通过原型链的方式指向,否则通过对象“指针地址”(可能表述不太准确)的方式,指向同一块内存(js中所有的类型都是对象)

OpenLayers.inherit = function(C, P) {   var F = function() {};   F.prototype = P.prototype;   C.prototype = new F;   var i, l, o;   for(i=2, l=arguments.length; i<l; i++) {       o = arguments[i];       if(typeof o === "function") {           o = o.prototype;       }       OpenLayers.Util.extend(C.prototype, o);   }};

ps:对javascript的原型继承prototype也是一知半解,自行参考资料

0 0
原创粉丝点击