如何在不触及类代码的情况下扩展已存在的javascript类?

时间:2013-12-13 21:53:10

标签: javascript jquery

首先,请允许我明确表示我在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));

任何人都可以帮我实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

您是否只是想在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内做什么逻辑取决于你。

P.S。这不是一个jQuery .extend()场景;更重要的是,扩展您的代码方案。