扩展javascript选项以添加功能

时间:2012-10-23 19:22:08

标签: javascript jquery

当“MyFunction”(创建一个元素)完成时,我需要调用“MyOtherFunction”,而MyFunction不知道MyOtherFunction是什么。

我需要这个的原因是扩展了jquery驱动的文件上载用户控件,该控件在具有不同功能的几个地方使用。一个特定的页面显示了它的标题和文件数,当上传完成时,我需要根据显示的文件数量(通过创建的元素)修改文件计数我认为:

$(UserControl).on(MyFunction, UploadElem, MyOtherFunction);

但这条路线没有完成任何事情。我可以更改用户控件的最多功能是添加函数调用,但不会影响原始用户控件功能。

我不确定是因为MyFunction不是一个事件而且没有冒泡,或者它是否不可能使用定义的函数作为.on()的参数是我无法得到这个的原因代码工作。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我能想到的最简单的方法是 duck punching 分别挂钩该方法:

var _oldMyFunction = MyFunction;

MyFunction = function() {
    _oldMyFunction.apply( this, arguments );
    MyOtherFunction();
};

答案 1 :(得分:0)

我设法解决了我自己的问题,但背景对于答案非常重要:

// Using a Global JavaScript object I created:
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 for the user control:
GlobalNameSpace.UploadControl.UploadComplete(oSender, oArgs)
{
    ///<summary>Handles the Upload process</summary>

    // process the upload
    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)
    {
      GlobalNameSpace.Page.Function(oSender, oArgs);
    }
}

这允许我扩展我需要的任何东西,而不会污染我的对象,并且已经存在一些通用的东西来调用我的更改。这个解决方案解决了我需要onCreate函数的问题,我创建的元素代表我上传的项目以触发显示文件数量的标题。非常有用