插件
VConsole 的 _addBuiltInPlugins 方法中有这五个内置插件:VConsoleDefaultPlugin、VConsoleSystemPlugin、VConsoleNetworkPlugin、VConsoleElementPlugin、VConsoleStoragePlugin,分别对应 vConsole 五大功能区:Log、System、NetWork、Element 和 Storage。
VConsoleDefaultPlugin 和 VConsoleSystemTab 都继承了 VConsoleLogTab,VConsoleLogTab 则继承了 VConsolePlugin;
VConsoleNetworkPlugin、VConsoleElementPlugin、VConsoleStoragePlugin 继承了 VConsolePlugin。
VConsolePlugin类
五个内置插件最终都继承了 VConsolePlugin 所以先从它看起。
VConsolePlugin 主要用于获取\设置 _id、_name、_vConsole,与注册事件与触发事件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
43class VConsolePlugin {
constructor(id, name = 'newPlugin') {
this.id = id;
this.name = name;
this.isReady = false;
this.eventList = {};
}
// 省略code...
/**
* 注册事件
* @public
* @param string
* @param function
*/
on(eventName, callback) {
this.eventList[eventName] = callback;
return this;
}
/**
* 触发事件
* @public
* @param string
* @param mixed
*/
trigger(eventName, data) {
if (typeof this.eventList[eventName] === 'function') {
// registered by `.on()` method
this.eventList[eventName].call(this, data);
} else {
// registered by `.onXxx()` method
let method = 'on' + eventName.charAt(0).toUpperCase() + eventName.slice(1);
if (typeof this[method] === 'function') {
this[method].call(this, data);
}
}
return this;
}
}
VConsoleLogTab类
VConsoleLogTab 是基础 log tab 类,VConsoleDefaultPlugin 和 VConsoleSystemTab 都会继承它。
1 | class VConsoleLogTab extends VConsolePlugin { |
this.mockConsole()
1 | mockConsole() { |
this.printLog()
向 Log Box 输出 Log
1 | /** |
this.printNewLog() 向DOM中插入新log
this.printLog,会调用 this.printNewLog 方法向DOM中插入新log
1 | /** |
VConsoleDefaultTab类
然后是 VConsoleDefaultTab 类只有3个方法:onReady、mockConsole 和 evalCommand。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
37class VConsoleDefaultTab extends VConsoleLogTab {
constructor(...args) {
super(...args);
this.tplTabbox = tplTabbox;
}
onReady() {
// code...
// 给 command 输入框绑定 keyup 事件
$.bind($.one('.vc-cmd-input'), 'keyup', function (e) {
// code...
});
// 提交命令事件
$.bind($.one('.vc-cmd', this.$tabbox), 'submit', function (e) {
// code...
});
// code...
}
// 使用 vConsole 的方法替换了 window.console & window.onerror。
mockConsole() {
// code...
}
// 执行command输入框中的命令
evalCommand(cmd) {
// code...
}
}
- mockConsole 方法使用 vConsole 的方法替换了 window.console & window.onerror。
- evalCommand 方法会使用
eval
来执行字符串命令。 - onReady 方法会给
command输入框
绑定keyup
事件并处理命令补全相关事项。还会处理命令提交事件,调用 evalCommand 来执行命令。