需要了解的知识点
1.Error
// Create a new object, that prototypically inherits from the Error constructor
function MyError(message) {
this.name = 'MyError';
this.message = message || 'Default Message';
this.stack = (new Error()).stack;
}
MyError.prototype = Object.create(Error.prototype);
MyError.prototype.constructor = MyError;
try {
throw new MyError();
} catch (e) {
console.log(e.name); // 'MyError'
console.log(e.message); // 'Default Message'
}
try {
throw new MyError('custom message');
} catch (e) {
console.log(e.name); // 'MyError'
console.log(e.message); // 'custom message'
}
功能模块特点:
1.在自己的容器中渲染,容器要么由别人提供,要么由它们自己添加到文档上。
2.它们提供了精心定义的API,以便控制它们的行为。
3.它们通过将自己的javascript,数据和css精心地隔离,避免污染主界面。
mvc:
1.模型(MODEL),应用的数据和业务规则
2.视图(VIEW),
3.控制器(CONTROLLER)将用户的请求转化为命令,更新应用的模型或者视图。
把之前所创立的chat模块独立出来
spa
+--css
| +--spa.css
| +--spa.shell.css
+--js
| +--jq
| | +--jquery-1.9.1.js
| | +--jquery.uriAnchor-1.1.3.js
| +--spa.js
| +--spa.shell.js
+--layout.html
+--spa.html
更改为:
spa
+--css
| +--spa.chat.css
| +--spa.css
| +--spa.shell.css
+--js
| +--jq
| | +--jquery-1.9.1.js
| | +--jquery.uriAnchor-1.1.3.js
| +--spa.chat.js
| +--spa.js
| +--spa.model.js
| +--spa.shell.js
| +--spa.util.js
+--spa.html
根据我们的架构Shell可以调用单页应用中的任何子模块。功能模块只调用共享的公用模块。功能模块之间的相互调用是不允许的。功能模块的唯一数据源或者功能智能来自shell,在配置和初始化期间以参数的形式传给模块的公开方法。
只有简单值(字符串,数字和布尔值)是直接传给函数的,javascript中的所有复杂数据类型(对象,数组,函数)传递的是引用。所以传递的内存地址的值。
配置和初始化的级联
首先,浏览文档中的一个脚本标签会配置和初始化根名字空间模块:spa.js。然后,根模块配置和初始化Shell模块:spa.shell.js。然后Shell模块配置和初始化功能模块:spa.chat.js。
所有的模块都有公开的initModule方法。只在需要支持设置时,才会提供configModule方法。
另外,如果希望把Chat(spa/js/spa.chat.js)的一些函数分离出来,放至一个处理在线用户列表的子模块去(我们称之为Roster),并创建文件spa/js/spa.chat.roster.js。然后,让Chat使用spa.chat.roster.configModule方法来配置模块,使用spa.chat.roster.initModule方法来初始化模块