如何在不接触类代码的情况下扩展预先存在的javascript类?

如何在不接触类代码的情况下扩展预先存在的javascript类?,javascript,jquery,Javascript,Jquery,首先,请让我明确一点,我对jQuery一点也不擅长,所以我请求这里的专家提供一些帮助 JS代码中有很大一部分,我想以某种方式进行扩展。请记住,我不能改变这一部分的任何内容。我只能在原始JS文件下面的HTML中插入另一个JS文件,它必须在原始JS文件中扩展一个方法 原来的JS文件由于来自商业社区软件而被破坏了,它是这样的: var memberlist = {}; (function($){ memberlist = function($){ var currentOp

首先,请让我明确一点,我对jQuery一点也不擅长,所以我请求这里的专家提供一些帮助

JS代码中有很大一部分,我想以某种方式进行扩展。请记住,我不能改变这一部分的任何内容。我只能在原始JS文件下面的HTML中插入另一个JS文件,它必须在原始JS文件中扩展一个方法

原来的JS文件由于来自商业社区软件而被破坏了,它是这样的:

var memberlist = {};

(function($){

    memberlist = function($){
        var currentOptions = {
            //...
        },
        coreOptions = {},
        //...
        resultsCache = {};

        //-------------------------------------
        // PUBLIC METHODS   
        var init = function( url, defaultType ){
            //...
        },
        getOption = function(option){
            return currentOptions[ option ];
        },
        setOption = function( option, value ){
            currentOptions[ option ] = value;
        };

        //-------------------------------------
        // PRIVATE METHODS
        var toggleType = function(e)
        {
            //...
        },


        // A DOZEN OTHER METHODS HERE

        // THIS IS THE METHOD WHERE I NEED TO PLANT A DOZEN MORE IF CHECKS PREFERABLY IN THE BEGINNING OF THE METHOD
        doAdvancedSearch = function(e){
            //...
            if( !$("#f_inc_secondary").is(':checked') )
            {
                vals['f_inc_secondary'] = 0;
            }



            //...
        };

        //-------------------------------------
        // Make public methods public
        return {
            init: init,
            getOption: getOption,
            setOption: setOption
        };      
    }($);

}(jQuery));

有谁能帮我实现这一点吗?

您只是想在doAdvancedSearch中添加其他函数调用/功能吗?只需传递一个函数引用数组,遍历它们,并在迭代时调用它们:

doAdvancedSearch = function(e, otherFunctionalityArray){
    if( !$("#f_inc_secondary").is(':checked') )
    {
        vals['f_inc_secondary'] = 0;
    }

    $.each(otherFunctionalityArray, function(){
        this();
    });
};

// Function would be called by doAdvancedSearch(e, [func1, func2, func3...]);
您可以单独使用上面的代码,只要您可以私下进行高级搜索。如果你需要一些公开的东西:

// Create a private member in your initial variable definitions
var currentOptions = {
    //...
},
coreOptions = {},
//...
resultsCache = {},
additionalAdvancedSearchFunctions = [];

请记住,我们不知道您计划在doAdvancedSearch中执行什么逻辑。您计划在doAdvancedSearch中执行什么逻辑取决于您


另外,这不是一个真正的jQuery.extend场景;更重要的是,扩展您的代码方案。

由于该函数是在外部无法使用的范围内定义的,因此您唯一的选择就是手动修改该函数。单击按钮可触发doAdvancedSearch。事件是在我无法编辑的文件的init方法中定义的。所以,我无法将更多参数传递给它的原始调用。我很好奇doAdvancedSearch是如何通过单击按钮触发的,因为该方法需要是公共的。该方法本身不是公共的,也没有任何公共方法以某种方式公开doAdvancedSearch。我只需要添加十几个类似于doAdvanceSearch原始代码中的检查。所以,在下面,或者上面,或者实际上在doAdvanced搜索中的任何地方,我需要输入以下代码:if$f_checkbox1.is':选中“{vals['f_checkbox1']=0;}如果$f_checkbox2.is':选中“{vals['f_checkbox2']=0;}如果$f_checkbox3.is”:选中“{vals['f_checkbox3']=0;}等,直到checkbox25该方法被另一个方法调用为止。总之,当你有一个直接的URL指向JS文件时,JS文件是可见的,所以我不认为让你指向它是犯罪行为。。。所以这里是第46行调用方法prepareAdvancedSearch,它反过来定义了一个按钮被点击调用DoAdvancedSearch的事件行586,感谢您花时间来查看这个
// Create another public method and make it public
addAdvancedSearch = function(newFunctions){
    this.additionalAdvancedSearchFunctions = newFunctions;
}
//Adjust your method call
doAdvancedSearch(e, this.additionalAdvancedSearchFunctions);