JavaScript函数创建命名空间
JavaScript function creates namespace
下面是为模块创建命名空间的脚本,我无法理解它在parent = parent[parts[i]]
之后是如何工作的,它是如何创建嵌套的?有什么建议吗?
var MYAPP = MYAPP || {};
MYAPP.namespace = function (ns_string) {
var parts = ns_string.split('.'),
parent = MYAPP,
i;
if (parts[0] === "MYAPP") {
parts = parts.slice(1);
}
for (i = 0; i < parts.length; i += 1) {
// create property if doesn't exist
if (typeof parent[parts[i]] === "undefined") {
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
return parent;
};
var module2 = MYAPP.namespace('MYAPP.modules.module2');
module2 === MYAPP.modules.module2; // true
简单地说,该函数将函数参数(一个完全限定名)分割为其组成部分(用点分隔)。然后,它说,"这个对象作为当前父对象的属性存在吗?"不,把它创建为父对象的一个属性,并使它成为下一个父对象。是的,将现有的对象设置为父对象,并对每个名称重复。"之后,它返回整个对象,您已经将其分配给var module2。
这是你不明白的部分:
for (i = 0; i < parts.length; i += 1) {
// create property if doesn't exist
if (typeof parent[parts[i]] === "undefined") {
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
So parent = MYAPP and parts = ['modules', 'module2'];
下面是在循环中所做的:
**i = 0** <br />
typeof parent[parts[0]] equals 'undefined' since MYAPP['modules] doesn't exist <br />
MYAPP['modules'] = {} (MYAPP is parent here and parts[0] equals 'modules') <br />
parent = MYAPP['modules'] <br />
**i = 1** <br />
typeof parent[parts[1]] equals 'undefined' since MYAPP['modules]['module2'] doesn't exist <br />
MYAPP['modules']['module2'] = {} <br />
parent = MYAPP['modules']['module2'] <br />
exists the loop since 1 < 1 is false <br />
returns parent, which is MYAPP['modules']['module2'] <br />
相关文章:
- 在命名空间中创建自定义事件
- Google Closure编译器为命名空间创建了不完整的别名
- 为什么使用自定义标记创建元素会在 IE9 或 10 的 outerHTML 中添加 xml 命名空间,直到调用 .fin
- 为命名空间上公开的方法创建类型定义
- 创建命名空间 Javascript 单例类的对象
- 如何在 Javascript 命名空间脚本中创建函数数组
- 如何为我的 class1 创建一个命名空间,然后将其实例化
- 创建具有命名空间的 SVG 对象
- 如何在同一个名称中创建两个不同的命名空间空间,避免覆盖第一个
- 使用命名空间创建新对象
- 如何创建一个空的命名空间对象而不覆盖另一个同名对象
- 如何在维护命名空间的同时创建类似jQuery的方法链接
- JavaScript函数创建命名空间
- 在node.js中创建一个带有命名空间的模块
- 在全局命名空间上创建新对象的合法使用
- 在jquery中创建命名空间时出错
- 在SVG命名空间中创建元素时绑定中断[使用JSFiddle]
- 在JavaScript中创建命名空间/类类型结构的最优雅的方法
- 从字符串创建一个命名空间对象来调用函数
- 为typescript中的嵌套命名空间创建打字员