我有一个声明如下的函数:
function Plugin(option) {
//logic here
}
$.fn.validator = Plugin
我需要用一些逻辑扩展这个函数,以便它做更像这样的事情:
function Plugin(option) {
if (myvariable == true)
{
//seperate logic
return;
}
//logic here
}
诀窍是我需要动态地将if语句添加到函数中,具有Plugin函数的代码会经常更新,并且我不想在每次文件更改时重新添加该逻辑。到目前为止,我只是使用所有逻辑创建整个函数,并用它替换旧函数。但这似乎浪费了很多代码。我希望有一种方法可以简单地合并它们,所以我试过了。
function Plugin(option) {
//logic here
}
function extendedPlugin(option) {
//seperate logic here
}
$.fn.validator = $.extend(Plugin, extendedPlugin);
//or
$.fn.extend($.fn.validator, extendedPlugin)
我在底部尝试了几种不同的逻辑但是它每次只返回第一个函数,有没有办法合并它们,因为函数在技术上是对象不是吗? 我想我可能需要对原型做一些事情,但我对它们的理解仍然非常有限。
答案 0 :(得分:3)
如果Plugin
直接写在某些第三方代码中,您可以重命名并替换旧函数:
var OldPlugin = Plugin;
Plugin = function(option)
{
if (myvariable == true)
{
//seperate logic
return /* anything? */;
}
return OldPlugin.apply(this, arguments);
}
当然,任何指定的OldPlugin
引用也必须替换:
$.fn.validator = Plugin; // After redefining "Plugin"
如果Plugin
没有直接写在任何地方,但只是通过$.fn.validator
调用,那么我会保留原始函数,只需将新函数分配给$.fn.validator
,从那里你可以调用原始的Plugin
函数。
答案 1 :(得分:1)
是否有理由不能从扩展函数中调用旧函数?
function Plugin(option) {
//logic here
}
function extendedPlugin(option) {
//seperate logic here
// then call Plugin?
return Plugin.call(this, option);
}
如果您需要新功能具有原始名称,您可以改为执行@Siguza回答
答案 2 :(得分:0)
我认为如果你使用JsonNode它会更容易 尝试这样做
function plugin(option){
option.execute();
}
$.fn.validator = Plugin;
以这种方式实施
var process1 = {
"execute":function(){
alert('hello proccess #1');
}
};
var process2 = {
"execute":function(){
alert('hello process #2');
}
};
$.fn.validator(process1);
$.fn.validator(process2);
或者
if(myvariable){
$.fn.validator(process1);
}else{
$.fn.validator(process2);
}