概述
在Map
类中,有一种高频出现的类Collection
(即集合),比如Map
类中interaction
、controls
和overlay
的定义初始化和一些操作调用都和Collection
有关。本文主要介绍 Openlayers 中Collection
类的实现以及Collection
类的事件机制。
源码剖析
Collection
类
Collection
类本质上就是对标准Javascript
数组进行了一层封装,添加了一些方法。当对集合进行添加或者移除数组项时,会触发一个事件,比如上面示例中的CollectionEventType.ADD
和CollectionEventType.REMOVE
操作被监听触发后,就会执行后面的回调函数。
其实现如下:
class Collection extends BaseObject {constructor(array, options) {options = options || {};this.unique_ = !!options.unique;this.array_ = array ? array : [];}clear() {while (this.getLength() > 0) {this.pop();}}extend(arr) {for (let i = 0, ii = arr.length; i < ii; ++i) {this.push(arr[i]);}return this;}forEach(f) {const array = this.array_;for (let i = 0, ii = array.length; i < ii; ++i) {f(array[i], i, array);}}getArray() {return this.array_;}item(index) {return this.array_[index];}getLength() {return this.get(Property.LENGTH);}insertAt(index, elem) {if (index < 0 || index > this.getLength(