canvasをメソッドチェーンで使うための簡単なラッパー

意外と簡単にかけたのでメモしておきます。
ちなみにループなどでjQueryを使用しています。

function CanvasRapper(elm) {
  if (elm.tagName != 'CANVAS') { return null; }
  
  this.elm  = elm;
  this.ctx  = elm.getContext('2d');

  var callee = arguments.callee;
  if (!callee.isInited) {
    var ctx = this.ctx;
    $.each(ctx, function (name, obj) {
      if (typeof obj == 'function') {
        callee.prototype[name] = function () {
          obj.apply(this.ctx, $.makeArray(arguments));
          return this;
        }
      } else {
        callee.prototype[name] = function (val) {
          if (val == null) { return this.ctx[name]; }
          this.ctx[name] = val;
          return this;
        }
      }
    });
    callee.isInited = true;
  }
}