我是做错了什么还是这根本不可能:
(function(namespace,undefined)
{
//Private properties and methods
var foo="bar";
function test(){return foo;}
//Public properties and methods
namespace.foobar=foo+"123";
namespace.showFoo=function(){return test();};
})(window.namespace=window.namespace || {});
然后我尝试“扩展”上面的命名空间并添加一个新方法:
(function(namespace,undefined)
{
//Public method
namespace.sayGoodbye=function()
{
alert(namespace.foo);
alert(namespace.bar);
alert(test());
}
})(window.namespace=window.namespace || {});
警报显示属性的 undefined
并为 test()
方法抛出错误。
谢谢。
最佳答案
为什么您希望有 foo
和 bar
可用?这些标识符永远不会分配给任何地方的 namespace
对象。
任何用 var
声明的变量只在当前激活/变量对象的函数(-上下文)中可用。 函数声明
也是如此,在您的例子中,test()
。这两个都仅存储在第一个匿名函数的 AO 中,而不存储在您的 namespace
对象中。您必须明确分配值
namespace.foo = foo;
namespace.bar = "hello I am bar";
关于javascript - 扩展 JavaScript 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738228/