任意の引数の束縛2006年02月21日 03時00分

前回 JavaScript での引数束縛を扱った際には引数リストの先頭からの束縛だったが、ななしさんによる Array#splice を使った方法を応用すれば任意の引数の束縛も比較的簡単な形で書ける。C++ には bind1stbind2nd というのがあるそうだが、それと同じようなことができるわけだ。

Function.prototype.bindNth = function (/* n, arg, ... */) {
  var self = this;
  var args = arguments;
  args[0]--;
  Array.prototype.splice.call(args, 1, 0, 0);
  return function () {
    Array.prototype.splice.apply(arguments, args);
    return self.apply(this, arguments);
  };
};

function concat(a, b) {
  return "" + a + b;
}

alert( concat.bindNth(1, "a")("b") ); // "ab"
alert( concat.bindNth(2, "a")("b") ); // "ba"

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
「ハイパーテキストマークアップ言語」をアルファベット4文字でいうと?

コメント:

トラックバック

このエントリのトラックバックURL: http://nanto.asablo.jp/blog/2006/02/21/262268/tb