如何在Javascript中创建命名空间静态函数?

时间:2010-08-18 14:26:03

标签: javascript

现在,我正在使用这种方式:

window.Foo = {
  alpha: function() {},
  bravo: function(arg) {}
}
window.Bar = {
  charlie: function(arg) {}
}

Foo.alpha()
Bar.charlie()

但我怀疑这不是“正确”做事的方式,因为(1)我的IDE在几个方面理解了我的意思(例如,如果我键入{{1,将不会自动完成函数名称) }}和(2)如果我遍历命名空间,然后只返回Foo.,我得到typeof eachone

3 个答案:

答案 0 :(得分:4)

此代码:

for(var key in window.Foo) 
{
  // Code  
}

仅将属性的名称分配给变量key,这是一个字符串。如果你需要 关联的对象(或函数),改为使用它:

for(var key in window.Foo) 
{
  var obj = window.Foo[key];
  // Code using obj
}

正如Matthew Flaschen所说,JavaScript等动态语言难以解析,因此如果您的IDE不理解某些内容,请不要过于担心。

答案 1 :(得分:3)

如果您不需要私有变量,那就完全没问题了。动态语言很难解析,而你的IDE却没有得到它。

另一种选择,特别是如果你确实需要一个私有类字段,是:

window.Foo = new (function(){
  var some_private;
  this.alpha = function(){},
  this.bravo = function(arg){// use arg and some_private}
})();

至于迭代,我怀疑你使用的是:

for(var key in window.Foo) 
{ 
  print(typeof key); 
}

尝试:

for(var key in window.Foo) 
{ 
  print(typeof window.Foo[key]); 
}

答案 2 :(得分:2)

试试这个。也许你的IDE会正确处理它

var Foo = {
   test: function() {},
   test2: function() {}
};

for(var prop in Foo) {
    console.log(typeof Foo[prop]); // Will log 'function'
}

window.Foo = Foo;