javascript – 覆盖jQuery函数 – 最佳实践

我的Web应用程序使用了许多JQuery插件,例如Datatables,它是相应的Row Reordering and Sorting插件.

问题是我们需要添加一些修复来解决恼人的IE8不一致问题.

因此,例如,在其中一个插件_mouseDrag()方法中,我们需要在开始时添加一些额外的逻辑.有没有办法在不修改插件源代码的情况下覆盖此功能?

在OO语言中,您通常会覆盖类方法,添加一些逻辑,然后调用super()方法以避免修改API的源代码.

因此,我想知道如何在不修改库本身的情况下在JavaScript中最好地支持它.

谢谢

更新的问题

根据下面的示例,如何覆盖我的_mouseDrag函数,该函数在第三方库中以如下方式存在:

(function( $, undefined ) {

$.widget("ui.sortable", $.ui.mouse, {

_mouseDrag: function (event){

...

}

我该如何完全覆盖这个?

解决方法:

试试这个(参见演示:http://jsfiddle.net/2rZN7/):

(function ($) {
  var oldPluginFunction =  $.fn.pluginFunction;

  $.fn.pluginFunction = function () {
    // your code
    return oldPluginFunction.call(this);
  };
})(jQuery);

来自演示:

HTML:

<span id="text1">text1</span>
<span id="text2">text2</span>

JavaScript的:

// define and use plugin

$.fn.pluginFunction = function (color) {
  return this.each(function () {
    $(this).css('color', color);
  });
};

$('#text1').pluginFunction('red');

// redefine and use plugin

(function ($) {
  var oldPluginFunction =  $.fn.pluginFunction;

  $.fn.pluginFunction = function () {
    $(this).css('font-size', 24)
    return oldPluginFunction.apply(this, arguments);
  };
})(jQuery);

$('#text2').pluginFunction('red');
上一篇:Python setter装饰器是如何工作的


下一篇:python – 使用可选参数创建装饰器