怎么了?通过字符串定义JavaScript命名空间

时间:2012-08-17 21:33:35

标签: javascript namespaces

我使用以下代码来定义名为com.foo

的新命名空间
function extendNamespace(ns, ns_string) {
    var parts = ns_string.split('.');
    var parent = ns;

    for (var i = 0; i < parts.length; i++) {
        //create a property if it doesnt exist
        if (typeof parent[parts[i]] == 'undefined') {
            parent[parts[i]] = {};
        }
        parent = parent[parts[i]];
    }
    return ns;
}

var com = {};
extendNamespace(com, "com.foo");

console.log(com); // OK (even has an object called "foo"!!)
console.log(com.foo); // Undefined ???

console.log(com)的第一次调用清楚地告诉我,在控制台中创建了一个新对象“com”,其中有一个名为“foo”的对象。

到目前为止,非常好。

第二个电话console.log(com.foo);虽然让我回复“未定义”。

是什么给出了?

1 个答案:

答案 0 :(得分:4)

  

console.log(com)的第一次调用清楚地告诉我,在控制台中创建了一个新对象“com”,它有一个名为“foo”的对象。

没有。它有一个名为com的属性,其值是一个带有foo属性的对象。

当您只想使用com扩展com.foo时,foo延长{。}}。