0

大量のJavaScriptを含むWebプロジェクトに取り組んでいますが、すべてを「$。」に追加していたため、名前空間の衝突が発生し始めました。

名前空間について読んで、http://addyosmani.com/blog/essential-js-namespacing/ですばらしい記事を見つけました。

推奨されているようにIIFE内に名前空間を設定しようとしましたが、関数はすでに次のように設定されているため、運が良かったと思いました。

(function() { ... }); 

だから私はそれを次のように変換しました:

(function(namespace, undefined) { ... })(window.stuff = window.stuff || {});

(数時間の作業の後)実際にオリジナルが

$(function() { ... }

つまり、すべてがjQueryのready()関数で呼び出されていたということです。

名前空間IIFEを維持したいのですが、jQueryのready()関数内でどのように使用するかがわかりません。これは可能ですか?もしそうなら、どのように?

4

2 に答える 2

0
var namespace = (function() {
    // local variables and functions

    function readyHandler($) {
         // DOM ready code
         $("selector").method();
    }

    // exposed methods
    return {
        readyHandler: readyHandler
    };
})();

jQuery(namespace.readyHandler);
于 2012-08-29T00:10:59.057 に答える
0

うーん、概念をまっすぐに理解したかどうかはわかりません...関数を呼び出していないため、これらの関数はいずれも即時呼び出し関数式のようには見えません。

(function() { ... } ());
                  --^-- invoke function 

jQueryreadyはすでに新しいクロージャーを作成しているので、とにかくIIFEは必要ありません。

いずれにせよ、jQueryを使用する場合、名前空間内のプラグインに、$汚染しないようにオブジェクトを使用して名前空間を付けることができます。

$.myplugin = {
  ...
}
于 2012-08-29T00:11:10.967 に答える