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



首先,让我明确一点,我在jQuery方面一点都不好,所以我向这里的大师寻求帮助。

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...]);

您可以自己使用上述代码,只要您可以私下使用doAdvancedSearch即可。如果你需要公开的东西:

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

// Create another public method and make it public
addAdvancedSearch = function(newFunctions){
    this.additionalAdvancedSearchFunctions = newFunctions;
}

//Adjust your method call
doAdvancedSearch(e, this.additionalAdvancedSearchFunctions);

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

附言:这并不是一个真正的jQuery .extend()场景;更重要的是,扩展您的代码场景。

最新更新