繁体   English   中英

从另一个js文件中的javascript函数调用命名空间函数时出现问题

[英]problem calling namespaced function from javascript function in another js file

Namespacing对我来说是JS中的新事物-我的项目已经变得非常复杂,是时候驯服野兽了:-P

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

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

我可以在带有$(function () {foo.update(); });的html页面上的文档就绪函数中调用foo.update $(function () {foo.update(); });

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

我正在尝试从bar.js调用它

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

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

我敢肯定这很简单-但我似乎找不到答案。

非常感谢!

您的函数应编写如下:

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

正如Matt所说,您的问题是缺少返回声明。 您正在使用的模块模式比命名空间更进一步,该模式允许在命名空间中同时具有名称空间和私有变量/函数,并仅通过return语句公开您想要的内容。
您可以在YUI博客上的这篇文章中了解有关模块模式的更多信息。

您已经使函数可以自动运行,但是另一方面,您尝试调用它。

如果要手动调用该函数,应采用以下方式:

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');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM