2017-07-18 6 views
2

グローバルオブジェクトには、グローバルにアクセス可能な一般的なメソッドが公開されていますが、IIFEにカプセル化してプロトタイプメソッド定義を主にカプセル化します。Javascript:IIFE内で定義されたグローバルオブジェクトを公開する

これを実現するには、現在、グローバルオブジェクトをIIFEのスコープ外に宣言し、スコープ内のオブジェクトの新しいインスタンスでオーバーライドします。

これにより、後で新しいインスタンスを作成することができなくなりますが、これは気にしません。また、効果的にグローバルオブジェクトをグローバルにアクセスできるようにします。

function CustomNamespace(){}; 
+function ($) {   
    CustomNamespace.prototype = { 
     constructor: CustomNamespace, 
     func1: function (args) { 
      // ... 
     }, 
     func2: function (args) { 
      // ... 
     }, 
     // ... 
    }; 
    CustomNamespace = new CustomNamespace(); 
}(window.jQuery || {}); 

// ... 

CustomNamespace.func1(); 

質問:これは悪い練習かアンチパターンと考えられますか?それを行うための他の "エレガントな"方法がありますか?

PS:これは些細な質問かもしれないが、この特定のケースではまだ回答が見つかりませんでした。

答えて

1

これはお使いになれませんか?

var CustomNamespace = function ($) { 
    function MyClass(){};   
    MyClass.prototype = { 
     constructor: MyClass, 
     func1: function (args) { 
      // ... 
     }, 
     func2: function (args) { 
      // ... 
     }, 
     // ... 
    }; 
    return new MyClass(); 
}(window.jQuery || {}); 

// ... 

CustomNamespace.func1(); 
+0

ありがとう、ありがとう – decksterr

関連する問題