Source: Layers/Layer.js

/**
 * 图层基础类
 * @class 
 */
class Layer {

	layers = []
    /**
     * Layer类的构造函数,会把所有用户参数挂到layer对象上
     * @param {object} config - 用户构造函数配置
     */
	constructor(config) {
		var _this = this;
		this._userConfig = config;
		for (var x in config) {
			this[x] = config[x]
		}

	}

    /**
     * 事件监听,用法同jQuery.on
     */
	on(type, listener) {
		if (this._listeners === undefined) this._listeners = {};
		var listeners = this._listeners;
		if (listeners[type] === undefined) {
			listeners[type] = [];
		}
		if (listeners[type].indexOf(listener) === - 1) {
			listeners[type].push(listener);
		}
	}

    /**
     * 触发事件 
     * @example 
     * this.fire("change",event)
     */
	fire(type, event) {
		if (this._listeners === undefined) return;
		var listeners = this._listeners;
		var listenerArray = listeners[type];
		if (listenerArray !== undefined) {
			var array = listenerArray.slice(0);
			for (var i = 0, l = array.length; i < l; i++) {
				array[i].call(this, event);
			}
		}
	}

    /**
     * 关闭事件
     * @example
     * this.off('change',onChange)
     */
	off(type, listener) {
		if (this._listeners === undefined) return;
		var listeners = this._listeners;
		var listenerArray = listeners[type];
		if (listenerArray !== undefined) {
			if (listener) {
				var index = listenerArray.indexOf(listener);
				if (index !== - 1) {
					listenerArray.splice(index, 1);
				}
			} else {
				this._listeners[type] = [];
			}
		}
	}

	initConfig(config) {

	}

    /**
     * 地图添加图层时调用,由子类实现
     * @param {Map} map - PigeonGL.Map实例
     */
	onAdd(map) {
		this.pigeonMap = map;
	}

    /**
     * 地图每帧调用该函数
     */
	update() {

	}

    /**
     * 移除图层时调用
     */
	onRemove() {
		if (this._listeners) {
			this._listeners = []
		}
	}

	/**
	 * 添加图层
	 * @param {Layer} layer - 图层
	 */
	addLayer(layer) {
		layer.id = ++this._layerid;
		this.layers.push(layer);
		layer.onAdd(this); //初始化layer
	}

	/**
	 * 删除图层
	 * @param {Layer} layer - 图层
	 */
	removeLayer(layer) {
		for (let x in this.layers) {
			if (this.layers[x].id == layer.id) {
				this.layers[x].onRemove();
				this.layers.splice(x, 1);
				return;
			}
		}
	}

	/**
	 * 获取图层通过id
	 */
	getLayerById(id) {
		for (let i = 0; i < this.layers.length; i++) {
			if (this.layer.id === id) return layer;
		}
	}

}
export default Layer;