forked from huiyan-fe/mapv
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClass.js
More file actions
75 lines (58 loc) · 1.91 KB
/
Class.js
File metadata and controls
75 lines (58 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/**
* base Class
*
*/
function Class () {
this.__listeners = {}; // 存储自定义事件对象
}
util.inherits(Class, MVCObject);
/**
* 注册对象的事件监听器
* @grammar obj.addEventListener(type, handler[, key])
* @param {string} type 自定义事件的名称
* @param {Function} handler 自定义事件被触发时应该调用的回调函数
* @remark 事件类型区分大小写。如果自定义事件名称不是以小写"on"开头,该方法会给它加上"on"再进行判断,即"click"和"onclick"会被认为是同一种事件。
*/
Class.prototype.addEventListener = function (type, handler) {
typeof this.__listeners[type] != "object" && (this.__listeners[type] = []);
this.__listeners[type].push(handler);
return this;
}
/**
* 移除对象的事件监听器。
* @grammar obj.removeEventListener(type, handler)
* @param {string} type 事件类型
* @param {Function} handler 要移除的事件监听函数
* @remark 如果第二个参数handler没有被绑定到对应的自定义事件中,什么也不做。
*/
Class.prototype.removeEventListener = function (type, handler) {
var fns = this.__listeners[type];
if (!fns) {
return false;
}
for (var i = fns.length; i >= 0; i--) {
if (fns[i] === handler) {
fns.splice(i, 1);
}
}
return this;
};
/**
* 派发自定义事件,使得绑定到自定义事件上面的函数都会被执行
* @grammar obj.dispatchEvent(event, options)
* @param {String} 事件名称
* @param {Object} options 扩展参数
*/
Class.prototype.dispatchEvent = function (type, options) {
var event = util.extend({}, options);
var fns = this.__listeners[type];
if (!fns) {
return false;
}
for (var i = fns.length - 1; i >= 0; i--) {
fns[i].call(this, event);
}
return this;
}
Class.prototype.dispose = function () {
}