javascript - 扩展 JavaScript 命名空间

标签 javascript javascript-namespaces

我是做错了什么还是这根本不可能:

(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() 方法抛出错误。

谢谢。

最佳答案

为什么您希望有 foobar 可用?这些标识符永远不会分配给任何地方的 namespace 对象。

任何用 var 声明的变量只在当前激活/变量对象的函数(-上下文)中可用。 函数声明也是如此,在您的例子中,test()。这两个都仅存储在第一个匿名函数的 AO 中,而不存储在您的 namespace 对象中。您必须明确分配值

namespace.foo = foo;
namespace.bar = "hello I am bar";

关于javascript - 扩展 JavaScript 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738228/

相关文章:

javascript函数作为类不返回私有(private)变量

javascript - 在 Javascript 中定义一个带有命名空间的类

javascript - 从内部更改 iframe

javascript - 在 JavaScript 中比较 MySQL 日期

javascript - CSS 变量和转换

命名空间ajax函数回调中另一个命名空间的javascript访问函数

javascript - JavaScript 模块模式与其替代方案有什么区别?

javascript - JSDoc:模块和命名空间之间的关系是什么

javascript - React dropzone 似乎没有将文件发送到我的 PHP 端点

javascript - addClass 转换不起作用