什么';怎么了?通过字符串定义JavaScript名称空间
我使用以下代码定义一个名为com.foo的新名称空间什么';怎么了?通过字符串定义JavaScript名称空间,javascript,namespaces,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[
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 ???
函数扩展名称空间(ns,ns\u字符串){
var parts=ns_string.split('.');
var父代=ns;
对于(变量i=0;i
console.log(com)
的第一次调用清楚地向我显示,在控制台中创建了一个新对象“com”,它有一个名为“foo”的对象
到目前为止,一切顺利
第二个调用console.log(com.foo)代码>虽然返回我“未定义”
有什么好处
对console.log(com)的第一次调用清楚地向我显示,在控制台中创建了一个新对象“com”,它有一个名为“foo”的对象
否。它有一个名为com
的属性,其值是一个具有名为foo
属性的对象
当您只想使用foo
扩展它时,您正在使用com.foo
扩展com
对console.log(com)的第一次调用清楚地向我显示,在控制台中创建了一个新对象“com”,它有一个名为“foo”的对象
否。它有一个名为com
的属性,其值是一个具有名为foo
属性的对象
当您只想用foo
扩展它时,您正在用com.foo
扩展com
,如果仔细观察,您会发现结构是com.com.foo
。您将com
传递到函数和字符串'com.foo'
中,该字符串将嵌套属性com
和com.foo
添加到传入的对象中。@Felix如果您刚刚将此作为答案发布,您将得到40分。3条评论投票+我的投票。如果你仔细看,你会发现结构是com.com.foo
。您将com
传递到函数和字符串'com.foo'
中,该字符串将嵌套属性com
和com.foo
添加到传入的对象中。@Felix如果您刚刚将此作为答案发布,您将得到40分。3张评论票+我的票。你说得对!因此正确的调用应该是extendNamespace(com,“foo”)代码>你是对的!因此正确的调用应该是extendNamespace(com,“foo”)代码>