谁能解释一下下面这个是如何工作的?
var MYAPP = {};
MYAPP.namespace = function(name){
var parts = name.split('.');
var current = MYAPP;
for (var i in parts) {
if (!current[parts[i]]) {
current[parts[i]] = {};
}
// shouldn't this line override the MYAPP object with all it's properties?
current = current[parts[i]];
}
}
最佳答案
current
首先被分配一个 reference 到 MYAPP
,之后,在循环中,对于来自 的数组的每个部分name.split
它随后被分配一个对 MYAPP
新创建的属性的引用。所以没有任何内容被覆盖,因为它都是引用。
例如,如果您执行 MYAPP.namespace(foo.bar)
,就会发生这种情况:
- 首先:
current
指向MYAPP
- 现在进入循环。如果
current/*is ref to MYAPP*/.foo
不存在,则创建MYAPP.foo
- 让
current
指向MYAPP.foo
- 如果
current/* 现在引用 MYAPP.foo*/.bar
不存在则创建它 - 最后
MYAPP
包含:MYAPP.foo
MYAPP.foo.bar
- 如果您想使用对象字面量将相同的内容分配给
MYAPP
作为MYAPP.namespace(foo.bar)
,您可以这样写var MYAPP = { foo: { bar: {} }
关于需要 JavaScript 嵌套命名空间生成代码解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328927/