从另一个js文件中的javascript函数调用namespaced函数的问题

时间:2011-02-28 01:23:40

标签: javascript namespaces

在js中,命名空间对我来说是新的 - 我的项目变得非常复杂,所以是时候驯服野兽:-P

我使用模块模式在foo.js中创建了一个名称空间foo。

var foo = (function () {       
        update: function () {
            alert('z');
        }
    };
}());

我可以在$(function () {foo.update(); });

的html页面上的文档就绪函数中调用foo.update

但我似乎无法从另一个js文件中调用它。

我试图从bar.js中调用它

function updateTheFoo() {
    foo.update();
}

实际的用例要复杂得多,因为我在一个动态创建的jQueryUI对话框中使用它,其中包含动态传递代码的可变按钮 - 但这很容易...

我确信这很简单 - 但我似乎无法找到答案。

非常感谢!

2 个答案:

答案 0 :(得分:1)

你的功能应该写成如下:

var foo = (function () {       
    return {
        update: function () {
            alert('z');
        }
    };
}());

你的问题,马特说是缺少的退货声明。您正在使用的是一个模块模式,它比命名空间更进一步,它允许在该命名空间内具有命名空间和私有变量/函数,并且只使用return语句显示您想要的内容。
您可以在this article on the YUI blog中了解有关模块模式的更多信息。

答案 1 :(得分:0)

你已经让你的功能自我运行,但另一方面, 你试着打电话。

如果要手动调用函数,应该如何编写:

var foo = foo || 
    {        
        update: function () { 
            alert('z'); 
        } 
    };

foo.update();

你也可以写:

var foo = foo || {};
foo.update = function() { alert('z'); };
foo.update();

// or pass a variable

foo.update2 = function(text) { alert(text); };
foo.update2('z');