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
- OpenLayers 2 源码解读(2) Class.js
- OpenLayers 2 源码解读(1)
- System class 源码解读
- Runtime class 源码解读
- mybatis源码解读(2)
- Openlayers 2 js文件的合并
- openlayers内lib/openlayers/util.js源码解析
- Vue2.5.9源码解读(2) — build/config.js
- CppUnit源码解读(2)
- CYYMysql 源码解读 2
- jqzoom源码解读 2
- WeX5源码解读(1)-- observable.js
- Zepto.js 源码解读
- push.js 源码解读
- jit.js源码解读
- vue.js 源码解读
- [源码解读] FastClick.js源码解读
- Ibatisnet源码解读(2)—DataMapper
- HBase学习之一: 创建hive和hbase关联表
- TCP
- 【中间件3】手把手教你在UbuntuKylin安装配置开源版Tair(请指教)
- HDU 5328 类似尺取
- RTTI运行时类型识别
- OpenLayers 2 源码解读(2) Class.js
- Android dex file cannot exceed 64K错误,使用Mutidex解决Dex超出方法数的限制
- ubuntu firefox 不能启用java
- Linux的sqlite数据库
- ext使用WdatePicker没有图标
- java jxl导出excel小结
- 无题
- java中jxl导出数据到excel的例子
- HBase学习之二: hbase分页查询