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