私は数か月遅れていますが、この機能を実現するためにかなりシンプルなデザインを使用しています。JavaScriptの構造はグローバルオブジェクトから実行され、コードをグローバル変数から保護します。
ページ/ユーザーコントロールごとに、新しいオブジェクトを保持するようにグローバルオブジェクトを変更していますが、一部のコードでは、場所ごとに異なる機能が必要であり、拡張メソッドが必要です。コードを複製して拡張インスタンスのオブジェクト全体を再定義したり、コードがどのように拡張されているかを気にしたりする必要はありません。
アヒルが思い通りになるまでパンチする代わりに、ジェネリック拡張メソッドを作成してみませんか?私たちのケースを使用して、ここに例があります:
// Using a Global JavaScript object:
GlobalNameSpace.ExtensionFunction = function(oParam1, oParam2, oParam3)
{
/// <summary>All parameters are optional</summary>
return; // For instances when it is not being overwritten, simply return
}
//In the Code to be extended:
GlobalNameSpace.Control.ControlFunction(oSender, oArgs)
{
///<summary>Control's function</summary>
// Function-y stuff..
GlobalNameSpace.ExtensionFunction(oSender, oArgs);
}
//and finally in the code to extend the functionality
GlobalNameSpace.Page.Init
{
///<summary>Initializes the page</summary>
// redefine the extension function:
GlobalNameSpace.ExtensionFunction = function(oSender, oArgs)
{
// Call the extension function, or just code the extension here
GlobalNameSpace.Page.Function(oSender, oArgs);
}
}
このメソッドの欠点は、一度に複数のオブジェクトに対してこれを実行する場合です。その時点で、拡張メソッドを、特に拡張したいコードに移動することをお勧めします。これを行うと、その拡張コードの一般性が低下しますが、必要に応じて決定できます。