JavaScript函数创建名称空间
下面是为模块创建名称空间的脚本,我不明白在parent=parent[parts[I]]之后它是如何工作的,它是如何创建嵌套的?有什么建议吗JavaScript函数创建名称空间,javascript,Javascript,下面是为模块创建名称空间的脚本,我不明白在parent=parent[parts[I]]之后它是如何工作的,它是如何创建嵌套的?有什么建议吗 var MYAPP = MYAPP || {}; MYAPP.namespace = function (ns_string) { var parts = ns_string.split('.'), parent = MYAPP, i; if (parts[0] === "MYAPP") {
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。简单地说,函数将函数参数一个完全限定的名称拆分为由点分隔的组成部分。然后,它说,这个对象是否作为当前父对象的属性存在?否,将其创建为父对象的属性,并使其成为下一个父对象。是,将现有对象设置为父对象,并对每个名称重复。之后,它返回整个对象,您已将其分配给var模块2。这是您不了解的部分:
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 />
这是您不理解的部分:
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 />
对module2的分配看起来很混乱。MYAPP比较也很混乱-你确定这是工作代码吗?对module2的分配看起来很混乱。MYAPP比较也很混乱-你确定这是工作代码吗?在第一次迭代后parent==MYAPP,after parent=parent[parts[i]]]-parent[parts[i]==空对象{},第二次迭代父级如何工作?第一次迭代父级==MYAPP后,父级=parent[parts[i]]]-parent[parts[i]]==空对象{}后,第二次迭代父级如何工作?