2010-11-28 5 views
3

より正確にはlocalStorageラッパーであるライブラリ(https://github.com/OscarGodson/storageLocker)をビルドしますが、これはOO JavaScript Iでの初めての試みです私はまだ学んでいると私はいくつかの質問があります。私のJSライブラリの構築、いくつかの質問

  1. 他のライブラリでは、それらを匿名関数でラップすることがあります。これで私はそうするのですか、そうするべきですか?もしそうなら、何も壊すことなくどのように?

  2. 内部API(基本的に内部機能)については、どのように書き込むべきですか?それらをメインオブジェクトに追加する必要があります。 storageLocker.prototype.myInternalFunction()またはスクリプト内でランダムにmyInternalFunction()を入力してください。私は関数がグローバルになることを望んでいませんでした...たとえば、JSONの項目の束をチェックし、そのオブジェクトがあるかどうかを確認してオブジェクトタイプが何であるかを確認してから(Date()など)それ。

  3. どのようにグローバルにスクリプトを追加する必要がありますか?例えば私はという名前のvarを持っています。それはvar patterns = {"date":/\/Date\(([0-9]+)\)\//}のようなものですが、それをスクリプトにどのように追加すればよいですか?

ありがとうございます。私はスクリプトを正しい方法で書いてほしいだから皆さんに聞いています。この技術の目的は、汚染されていない)

1:私は、私は言うだろう...彼らはすべての古い学校の種類だ、任意のOO JSを行うことローカルで任意のJSみんなの

+1

(JavaScript)クロージャについて読むことを強くお勧めします。彼らはこの言語にその力を与えるものです。 – jwueller

+0

クール、ありがとう:) –

答えて

2

http://nefariousdesigns.co.uk/archive/2010/10/object-oriented-javascript-follow-up-part-2-technical/

は読む価値が名前空間を上まともなセクションを持っている "プライベート" 変数を保ちました。

http://yuiblog.com/blog/2007/06/12/module-pattern/

また別の良い概要です。

良いjavascriptのプラクティスの詳細偉大な材料については、コメント欄で私たちの議論の後

http://javascript.crockford.com/

をチェックアウト、私はこれまでの例を変更しました:

var storageLocker = function (selector) { 

    var _selector = selector || "default value"; 

    function myPrivateFunction() { 

    } 

    var public = { 

     get: function() { 
      return _selector; 
     }, 

     uppercase : function() { 
      _selector = _selector.toUpperCase() 
      return this; 
     } 

    } 
    return public; 

}; 

// use: 
var test = storageLocker("search for this").uppercase().get();; 

alert(test); 

これはライブラリ/モジュールの例ではありませんが(コンストラクタを直接呼び出してコードにアクセスするため)、eメソッドの連鎖のために同じオブジェクトをスコープに保持する例実際にはそれはstorageLockerオブジェクトを返さず、 'public'オブジェクトを返していますが、そのオブジェクトはクロージャによってstorageLockerのスコープにアクセスできます。

おそらくstorageLockerオブジェクト自体を返すことによってこれを行う他のよりよい方法があるかもしれませんが、それはもう少し考える必要があります。

+0

はい、欠落しています};私はそれを修正します。項目を選択することは、パブリックメソッドの実装の詳細です。 –

+0

jQueryのようにメソッドを連鎖させるためには、各パブリックメソッドはモジュール/オブジェクト自体を返す必要があるので、さらに関数呼び出しを行うことができます。私はこの例を更新します... –

+0

まあ、私はここに表示されるエラーを得ていた:http://stackoverflow.com/questions/4300135/set-my-var-to-an-anonymous-function-with-a-a-a-a-a-a-パラメータ –

3

を知りませんグローバル名前空間。それは良いことです。 以下の例では、ライブラリとのすべての対話が1つのオブジェクトMyLibraryを介して行われていることがわかります。パブリックAPIは、匿名関数の戻り値です。

var MyLibrary = function() { 
// private 
    this.InternalVariable = 'some value'; 

    function internalFunction(x,y) { 
     return x + y; 
     } 

    function getInternalVariable() { 
    return this.InternalVariable; 
} 
// public 
    return { 
     publicVariable : '1.0', 
     publicFunction : function(x,y) { 
     return x + y 
     }, 
accessInternalVariable : function() { 

    return getInternalVariable(); 
    } 
     } 
    }(); 

2)あなたの「内部」機能

3を配置する方法については、上記の例も参照のこと)もしグローバル変数が設定オプションのいくつかの種類であれば、私は公共のセッター/ゲッターを作ると思いますそして

+0

恐ろしい!あなたは男を揺らす。いいえ、設定オプションがないので、 'this.InternalVariable'はうまく動作するはずです。私はそれを試してみると、これはすべて正常に悪いマークを動作する場合);)再びありがとう! –

+0

今は自分のスクリプトを変更していますが、これをやっている間に...連鎖はまだ動作しますか?私は故意にチェーンを張るようにスクリプトを書いて、ちょうどそれがこのように働くことを確実にしたいと思っています。 –

+0

連鎖のためには、メソッドが連合しているオブジェクトを返さなければなりません。 – jira

関連する問題