jQuery插件函数覆盖

时间:2015-04-27 09:02:34

标签: javascript jquery function plugins overwrite

我为我当前的项目实现了几个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. Function 2.

事实上,由于callFunction()也在第二个插件中定义,因此使用的是。{/ p>

我想建议一下解决这个问题的最佳方法是什么。 是否可以创建类似命名空间的东西?

2 个答案:

答案 0 :(得分:0)

你可以试试这个,



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


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

  $.fn.callFunction = function(param) {
    $(this).append(param);
  };
});
(function($) {
  $(document).ready(
    function() {
      $("#div1").initPlugin1(); //Run correctly
      $("#div2").initPlugin2(); //Run correctly

      $("#div1").initPlugin1().callFunction('function1');
      $("#div2").initPlugin2().callFunction('function2');
    });

})(jQuery);




答案 1 :(得分:0)

感谢@syms的回答,我创建了以下示例。

<强> Plugin1:

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

    $.fn.initPlugin2.testFunction = function() {
        $(this).append('Function 2.');
    };
});

<强> Plugin2:

(function($)
{
    $(document).ready(
        function()
        {
            $("#div1").initPlugin1(); //Run correctly
            $("#div2").initPlugin2(); //Run correctly

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

})(jQuery);

主要

Cannot read property 'createDocumentFragment' of null

当我运行我的代码时,出现以下错误:this

显然,schedule.StartTime = DateTime.SpecifyKind(Start, DateTimeKind.Utc); 对象已损坏。