簡體   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