我迟到了几个月,但我正在使用一个相当简单的设计来完成这个功能。我们的 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);
}
}
此方法的缺点是如果您想一次对多个对象执行此操作,此时将扩展方法移动到您特别想要扩展的代码中可能是一个更好的主意。这样做会使扩展代码不那么通用,但这可以根据您的需要来决定。