任意の引数の束縛 ― 2006年02月21日 03時00分
前回 JavaScript での引数束縛を扱った際には引数リストの先頭からの束縛だったが、ななしさんによる Array#splice
を使った方法を応用すれば任意の引数の束縛も比較的簡単な形で書ける。C++ には bind1st
、bind2nd
というのがあるそうだが、それと同じようなことができるわけだ。
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: http://nanto.asablo.jp/blog/2006/02/21/262268/tb
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。