3

カスタム レイアウト スクリプト用に独自のライブラリを作成しています。使いやすくするために、jQuery が jQuery() を介してそのライブラリを公開する方法をエミュレートしようとしています。これにより、コードが非常に読みやすく簡単になります。うまくいくものを思いつきましたが、これが正しい方法であるかどうかはわかりません。関数を内部に保持するのではなく、すべての関数がライブラリに「追加」されます。とにかく、これまでのところ私のために働くコードは次のとおりです:

slateUI = (function(slateID){
    slateUI.ID = slateID;
    return slateUI;
});

関連する関数は次のようになります。

slateUI.doSomething = function(content)
{
    //DID SOMETHING USING slateUI.ID
}

私は言語の機能のような OOP にかなり慣れていません。これにアプローチするより良い方法があると確信しています。私が抱えている問題は、要素を追加された関数呼び出しに渡すことです。たとえば、次のようになります。

slateUI("#someSlate").doSomething(...)

slateUI.ID からその要素を取得します

これはこれにアプローチする正しい方法ですか?それとも、これは私が思いついたハッキン​​グされた方法であり、これを行う簡単な方法はありますか?

4

2 に答える 2

1
// function which returns a new SlateUI object (so we dont have to use the "new" keyword)
slateUI = function ( slateID ) {
    return new SlateUI( slateID );
};

// class definition
function SlateUI ( slateId ) {
    this.id = slateId;
}
// methods added to the class prototype (allows for prototypical inheritance)
SlateUI.prototype.someFunction = function() {
    alert( this.id );
    return this; // adding this line to the end of each method allows for method chaining
};

// usage
slateUI( 'someid' ).someFunction();
于 2012-08-27T17:38:54.763 に答える
0

あなたの質問の短いバージョンは、関数を連鎖する機能を探しているということです。

これは、各関数から関連するオブジェクトを返すだけで実現されます。関数に他の戻り値がない場合は、this変数を返すだけで、制御を呼び出し元に戻します。

于 2012-08-27T13:13:07.997 に答える