1

jQueryで既存のオブジェクトメソッドを拡張するにはどうすればよいですか?

たとえば、私はjqBarGraphを使用しています。addGrid()次に、関数を追加します。私はそうするだろうと思っていました:

(function($) {
  $.fn.jqBarGraph.addGrid = function(){
    var o = this;
    // do something with 'o'
    return o;
  }
})(jQuery);

...しかし、電話すると$('#chart').jqBarGraph(options).addGrid();-エラーが発生します:

Uncaught TypeError: Cannot call method 'addGrid' of undefined

4

1 に答える 1

6

関数にプロパティを追加しているので、実際には次のようにしかアクセスできません。

$('#chart').jqBarGraph.addGrid();

それはあなたが望むものではありません。jqBarGraph呼び出されても何も返されないようです。次のように、自分で関数にパッチを適用する必要があります。

(function(old) {
  $.fn.jqBarGraph = function() {
    old.apply(this, arguments);  // call the actual function

    // return something
    return {
      addGraph: function() { ... }
    };
  };

  $.fn.jqBarGraph.defaults = old.defaults;  // restore properties
})($.fn.jqBarGraph);
于 2012-09-27T20:46:09.333 に答える