2016-07-07 7 views
0

私はいくつかの '名前空間' 構文を持っている:JavaScriptのグローバルオブジェクトのインスタンス名

var APP = {}; 

を私は持っている:

APP.one_sub_app = function() {} 
etc. 

私はAPPオブジェクトのインスタンスを作成し、私はAPPに追加します。

APP.my_instance = new APP.one_sub_app(); 

私はすべてのアプリケーションをAPP内に保ちたいと思います。さて、私のアプリは正常に動作します。今度はAPPをZに変更するuglifierを適用します。私はZがAPPであることを知る方法が必要です(たとえば)Z(本当にAPP)を扱う方法が必要なためです。どのオブジェクトの親がAPPか他のオブジェクトかどうかをチェックする方法が必要です。

Z.constructor.nameを使用して名前を取得することは解決策ですが、私の場合、Z(APP)は名前のないオブジェクトです。

これを修正する方法はありますか?私が探している可能性のある他の外部インスタンスは私のカスタムプロパティを持つことができないので、私はカスタムプロパティを作成したくない。どのようにして同じ名前のグローバルオブジェクトの '自動インスタンス化'を作成しますか?

+3

'APP'のすべてのインスタンスが' Z'になるので、何が問題なのですか?細分化はあなたには透明でなければなりません。グローバルオブジェクトが他のアプリケーションによって使用されることを目的としていない限り、あなたが名前を強制したいのであれば、文字列を使ったインデクサ構文を使うことは細分化を生き延びるだろうと思う: 'global ['APP'] = {};' – Ben

+2

グローバル変数の痛みを人々が感じるとき、おそらく、これは、グローバルがあなたのアプリに適していないことを示すものです。 – naomik

+0

@BenAston。問題は、Zや他の名前がAPPであるという方法が必要なことです。私はそれを知る必要がある内部コードを持っています。私はobject.definePropertyという名前を使って '名前'を作成する唯一の方法だと思っています。 – civiltomain

答えて

0

minifierで名前空間変数の名前を変更しないようにするには、グローバル化します。

var APP = {}; 

(function() { 
    APP.foo = function() {/* ... */}; 
    APP.bar = function() {/* ... */}; 
})(); 

または単にwindow.APP = {};var APP = {};の代わりに使用します。すぐに、呼び出される関数(前)外にを宣言することで名前空間関数はで定義されています。

関連する問題