2009-04-20 18 views
0

この解決策は、John Resigのクラス実装の使用を提案しています。questionこのソリューションは、私以外のすべてのニーズをカバーしています:javascriptクラスのクラス変数

外部からアクセスできるこのクラス内のパブリックグローバル変数を宣言するにはどうすればいいですか?

私は次のようなものを確立したいと思います:

var MyClass = Class.extend({ 

     EVENT_NAME : 'event-name', 

     init : function() { 
      // ... 
     } 

    }); 

// Now another file can directly read this value without creating the class object 
console.log(MyClass.EVENT_NAME); 

答えて

4

「唯一の」方法は、機能を「クラス」として使用することです。このようにして、パブリック "静的"メンバーにアクセスできる "クラス"を宣言します。このような何か:あなたはJavascriptのよりダイナミックなものと静的型付け言語から概念を混合しているよう

function MyObject() { 
    // constructor stuff here 
} 
MyObject.EVENT_NAME = "event_name"; 

console.log(MyObject.EVENT_NAME); // No need to instantiate MyObject 

しかし、私には思えます。なぜ、作成されていないオブジェクトのメンバーにアクセスしたいのですか?

+0

そこにはたくさんの理由があります。既にJavascriptにベークされている例があります:Mathクラスのすべての静的メンバーとメソッドを見てみましょう:Math.PI、Math.round()など。これは基本的な名前空間です。紛争を避けたい – nickf

+0

私は理解しますが、あなたが基本的に言ったのは、定義/作成される前に "クラス"のメンバーにアクセスしたいということでした。 – Helgi

+0

クラス内で静的フィールド変数を宣言する必要があります。 MyObjectを使用する他のクラスでは、それに対してさまざまな比較が必要です(それが意味をなさなければ)。 nickfはMath.PIの良い例を挙げています。 – Hady

1

ウィンドウのコンテキストでそれを宣言しますか 'VAR' キーワードは使用しないでください:実際に

window.globalVar = somevalue 
globalVar = somevalue 
+0

yip、それは私の秋のバックプランです。しかし、私の好みは、そのクラスを所有していることです。 – Hady

0
var MyClass = Class.extend({ 

     EVENT_NAME : 'event-name', 

     init : function() { 
      // ... 
     } 
     return { 
      event_name: function() { return EVENT_NAME; } 
     } 

    }); 
    console.log(MyClass.event_name); 

を、正直言って、私は実際にextend()を使用していないので、上記のことが.extend()とどのように動作するのか分かりません。 しかし、return { name:value }技法は、オブジェクトのパブリックインスタンスメソッドを公開する非常に一般的な方法です。それを正しくテストするのに時間がかかるべきではありません。申し訳ありませんが、私はそれを自分で行う機会がありませんでした。

+0

私はあなたが持っているEVENT_NAME: 'イベント名'は、グローバル変数であることを指摘します。グローバル変数の前に 'var'がないからです。 – Steerpike