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

What's wrong? Defining a JavaScript namespace via string

本文关键字:定义 JavaScript 命名空间 字符串 怎么了      更新时间:2023-09-26

我使用以下代码定义一个名为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);返回我"未定义"。

什么给?

控制台.log(com)的第一次调用清楚地向我在控制台中显示已经创建了一个新对象"com",其中包含一个名为"foo"的对象。

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

当您只想使用 foo 扩展com时,您正在使用 com.foo 进行扩展。