2011-12-23 6 views
0

JavaScript「クラス」をラップしますか?JavaScriptの「クラス」をセルフ実行で折り返していますか?

以下は、メッセージを表示するための簡単な「クラス」です。出力HTML divを格納し、必要に応じてメッセージを表示します。

正常に動作します。読みやすさとカプセル化目的のために、私はソートのコンテナまたはJavaScriptオブジェクトの "クラス"のコンポーネントを望みますか?これを行う最も簡単な方法は何ですか?

または...これを行う簡単な方法はありますか?

現在、唯一のコンテナは、コードを囲んでいるコメントです。

/** 
*  Module :  Model 
*  Name :  -Message 
*  Input :  div via the constructor 
         message type via display 
*  Output :  TextStream via display to Control.sendInner 
*  Notes :  Symmetric, client holds message location so needs extra variable 
*/ 

var Message = function(div) 
{ 
    this.div = document.getElementById(div); 
}; 

Message.prototype.messages = 
{ 
    name:  'Please enter a valid name', 
    email:  'Please enter a valid email', 
    pass:  'Please enter passoword, 6-40 characters', 
    url:  'Pleae enter a valid url', 
    title:  'Pleae enter a valid title', 
    tweet:  'Please enter a valid tweet', 
    empty:  'Please complete all fields', 
    empty_bm: 'Please complete all fields', 
    same:  'Please make emails equal', 
    taken:  'Sorry, that email is taken', 
    validate: 'Please contact <a class="d" href="mailto:[email protected]">support</a> to reset your password' 
}; 

Message.prototype.display = function(type) 
{ 
    Control.sendInner(this.div, this.messages[type]) 
};  


/**  Message End  */ 
+0

これはコードレビューの質問です。ここに投稿してみてください:http://codereview.stackexchange.com/ – karim79

+0

あなたは何を達成しようとしていますか? –

+0

カプセル化と可読性 –

答えて

1

私が正しくあなたを理解していれば、あなたはそのように自己呼び出し機能を使用して、クラスをnamespaceことができます。

(function(window, undefined) { 
    var foo = 0; //private variable accessible only to code within this scope 

    //Your class definition: 
    window.Message = function(div) 
    { 
     this.div = document.getElementById(div); 
    }; 

    Message.prototype.message = //... 

    //.... 
})(window); 

しかし、たぶん私は質問を誤解し...

一般的な方法JSでクラスを作成する:

(function(window, undefined) { 
    window.Class = function() { 
     var private, variables, here; 

     function privateFunc1(v) { here = v; } 
     function privateFunc2() { return here; } 

     return { 
      publicSet: privateFunc1, 
      publicGet: privateFunc2 
     }; 
    } 
})(window); 

//Usage: 
var c1 = new Class(), c2 = new Class(); 

c1.publicSet(true); 
console.log(c1.publicGet(), c2.publicGet()); //output: true, undefined 

EDITいくつかの使用法のためにコードを少し変更しました

+0

2番目のパラメータに値を渡さないと、比較される未定義の値が常に適切に参照されるように、値は未定義になります。関数ラッパーは、独自のスコープにコードを配置します。グローバルスコープで使用するために 'window'に割り当てるものを除いて、私はそのスコープ内のものにはアクセスできません。 – Chad

+0

宣言と呼び出しの間には基本的に1対1の関係はありません。少なくともjavascriptでは呼び出し時にパラメータをスキップすると、それらのパラメータは効果的に未定義として送信されます。グローバルスコープを渡し、undefinedというパラメータを持つこのパターンは、A)グローバル参照を1回だけ検索し、B)定義されていない名前として 'undefined'のクリーン/ (私は個人的に私はそれが少しだと思うが)何かとして再定義することができます。 – meandmycode

+0

@ stack.user.0私のパラダイムと使用方法に関する情報を投稿しました。 – Chad

関連する問題