Javascript jQuery插件函数覆盖

Javascript jQuery插件函数覆盖,javascript,jquery,function,plugins,overwrite,Javascript,Jquery,Function,Plugins,Overwrite,我已经为我当前的项目实现了几个jQuery插件 由于某些插件具有相同名称的函数,因此定义了上一个插件中调用的函数 以下是我的第一个插件的定义: $(function($) { $.fn.initPlugin1 = function(parameters) { var defaultParameters = {}; $(this).data('parameters', $.extend(defaultParameters, parameters));

我已经为我当前的项目实现了几个jQuery插件

由于某些插件具有相同名称的函数,因此定义了上一个插件中调用的函数

以下是我的第一个插件的定义:

$(function($)
{
    $.fn.initPlugin1 = function(parameters)
    {
        var defaultParameters = {};
        $(this).data('parameters', $.extend(defaultParameters, parameters));
        return $(this);
    };

    $.fn.function1 = function(){ console.log('Function 1.'); };

    $.fn.callFunction = function(){ $(this).function1(); };
});
下面是我的第二个插件的定义:

$(function($)
{
    $.fn.initPlugin2 = function(parameters)
    {
        var defaultParameters = {};
        $(this).data('parameters', $.extend(defaultParameters, parameters));
        return $(this);
    };

    $.fn.function2 = function(){ console.log('Function 2.'); };

    $.fn.callFunction = function(){ $(this).function2(); };
});
我也有这样一个场景:

$("#div1").initPlugin1().callFunction();
$("#div2").initPlugin2().callFunction();
对于此特定场景,控制台显示:
Function 2。功能2。

事实上,由于第二个插件中也定义了
callFunction()
,因此使用的就是这个插件

我想就解决这个问题的最佳方法提出一些建议。 有没有可能创建一个类似于名称空间的东西?

你可以试试这个

$(函数($){
$.fn.initPlugin1=函数(){
log('Initialized Plugin1');
返回美元(此);
};
});
$(函数($){
$.fn.initPlugin2=函数(){
log('Initialized Plugin2');
返回美元(此);
};
$.fn.callFunction=函数(参数){
$(this).append(param);
};
});
(函数($){
$(文件)。准备好了吗(
函数(){
$(“#div1”).initPlugin1();//正确运行
$(“#div2”).initPlugin2();//正确运行
$(“#div1”).initPlugin1().callFunction('function1');
$(“#div2”).initPlugin2().callFunction('function2');
});

})(jQuery)感谢@syms answer,我创建了以下示例

插件1:

$(function($) {
    $.fn.initPlugin1 = function() {
        console.log('Initialized Plugin1');
        return $(this);
    };

    $.fn.initPlugin1.testFunction = function() {
        $(this).append('Function 1.');
    };
});
$(function($) {
    $.fn.initPlugin2 = function() {
        console.log('Initialized Plugin2');
        return $(this);
    };

    $.fn.initPlugin2.testFunction = function() {
        $(this).append('Function 2.');
    };
});
(function($)
{
    $(document).ready(
        function()
        {
            $("#div1").initPlugin1(); //Run correctly
            $("#div2").initPlugin2(); //Run correctly

            $("#div1").initPlugin1.testFunction(); //Fail
            $("#div2").initPlugin2.testFunction(); //Fail
        });

})(jQuery);
插件2:

$(function($) {
    $.fn.initPlugin1 = function() {
        console.log('Initialized Plugin1');
        return $(this);
    };

    $.fn.initPlugin1.testFunction = function() {
        $(this).append('Function 1.');
    };
});
$(function($) {
    $.fn.initPlugin2 = function() {
        console.log('Initialized Plugin2');
        return $(this);
    };

    $.fn.initPlugin2.testFunction = function() {
        $(this).append('Function 2.');
    };
});
(function($)
{
    $(document).ready(
        function()
        {
            $("#div1").initPlugin1(); //Run correctly
            $("#div2").initPlugin2(); //Run correctly

            $("#div1").initPlugin1.testFunction(); //Fail
            $("#div2").initPlugin2.testFunction(); //Fail
        });

})(jQuery);
Main:

$(function($) {
    $.fn.initPlugin1 = function() {
        console.log('Initialized Plugin1');
        return $(this);
    };

    $.fn.initPlugin1.testFunction = function() {
        $(this).append('Function 1.');
    };
});
$(function($) {
    $.fn.initPlugin2 = function() {
        console.log('Initialized Plugin2');
        return $(this);
    };

    $.fn.initPlugin2.testFunction = function() {
        $(this).append('Function 2.');
    };
});
(function($)
{
    $(document).ready(
        function()
        {
            $("#div1").initPlugin1(); //Run correctly
            $("#div2").initPlugin2(); //Run correctly

            $("#div1").initPlugin1.testFunction(); //Fail
            $("#div2").initPlugin2.testFunction(); //Fail
        });

})(jQuery);
运行代码时,出现以下错误:
无法读取null的属性“createDocumentFragment”


显然,
对象已损坏。

$.fn.callFunction
是jquery插件,为什么要将其扩展为两种不同的类型。所以不要使用prototype方法。您是否也希望能够这样编写:
$(“#div1”).callFunction()?@dfsq非常感谢!这样就不会调用
initPlugin1
。完成了任务!谢谢你的帮助;)@syms当我遇到一个奇怪的错误时,我正在用你的方法重构代码:
TypeError:cannotread属性'createDocumentFragment'为null
。显然,
这个
对象与以前不同。我正在使用这个插件结构:$(function($){$.fn.initPlugin1=function(){return$(this);};$.fn.initPlugin1.function1=function(){$(this).append('function 1.');};$.fn.initPlugin1.callFunction=function(){$(this).initPlugin1.function1();})@syms我创建了一个新的示例来演示这个问题。@syms肯定它会工作,但这不是我想要做的。每个插件都应该有自己的
testFunction
,因为每个插件的内容不同。