在js中,命名空间对我来说是新的 - 我的项目变得非常复杂,所以是时候驯服野兽:-P
我使用模块模式在foo.js中创建了一个名称空间foo。
var foo = (function () {
update: function () {
alert('z');
}
};
}());
我可以在$(function () {foo.update(); });
但我似乎无法从另一个js文件中调用它。
我试图从bar.js中调用它
function updateTheFoo() {
foo.update();
}
实际的用例要复杂得多,因为我在一个动态创建的jQueryUI对话框中使用它,其中包含动态传递代码的可变按钮 - 但这很容易...
我确信这很简单 - 但我似乎无法找到答案。
非常感谢!
答案 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');