Как мне расширить свой ранее существующий класс javascript без возможности касаться кода класса?

0

Прежде всего, позвольте мне прояснить, что я не очень хорош в jQuery, поэтому я прошу гуру здесь помочь.

Существует большая часть JS-кода, который я хочу расширить в некотором роде. Пожалуйста, имейте в виду, что я ничего не могу изменить в этой части. Я могу вставить еще один JS файл в HTML ниже оригинала, который должен будет расширить метод в исходном 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
    Поскольку эта функция определена в области видимости, которая недоступна извне, единственный вариант, который у вас есть, это буквально изменить функцию вручную.
Теги:

1 ответ

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, зависит от вас.

PS Это не сценарий jQuery .extend(); Более того, расширьте свой сценарий кода.

  • 0
    DoAdvancedSearch запускается нажатием кнопки. Событие определено в методе init файла, который я не могу редактировать. Таким образом, я не могу передать больше параметров в исходный вызов.
  • 0
    Мне любопытно, как doAdvancedSearch вызывается нажатием кнопки, потому что этот метод должен быть общедоступным. Сам метод не является общедоступным, и нет никакого открытого метода, который doAdvancedSearch либо образом предоставляет doAdvancedSearch .
Показать ещё 15 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню