Javascript(prototype.js)についての質問です。


以下のソースコードで
apply時に _args.concat( $A( arguments ) としている意味を教えてください。


Function.prototype.bind = function(){
  var _method = this;
  var _args = $A( arguments );   //引数を配列に変換
  var _this = _args.shift();   //1個目はthisとして扱うため取り出す

  return function(){
    return _method.apply( _this , _args.concat( $A( arguments ) ) );
  }
}


argumentsを$Aにて配列に変換し、_argsへ格納、
_args.shift()で this とする一つ目の引数を取り出します。

そして apply を呼ぶ際に必要な this と 引数部を指定します。

この時、argumentsの1つ目以降を引数として考えるならば、
_args.concat( $A( arguments )でなぜ _args に arguments を
結合しているのでしょうか?

回答の条件
  • 1人1回まで
  • 登録:2009/03/20 00:18:21
  • 終了:2009/03/20 01:04:23

回答(1件)

id:susie-t No.1

susie-t回答回数99ベストアンサー獲得回数182009/03/20 00:48:40

ポイント60pt

最初のargumentsはbindメソッド実行時の仮引数を意味し、クロージャ内のargumentsはbindメソッドが返却した関数が実行されたときの仮引数を意味し、別物です。

下記例のように、bind時にあらかじめ引数を指定する場合等に利用できます。

function Test(){
  this.prop = "PROP";
}
function fnc(arg1, arg2) {
  alert(this.prop + "," + arg1 + "," + arg2);
}
var test = new Test();
var test_fnc = fnc.bind(test, "AAA");
test_fnc("BBB");

参考になりますでしょうか。

id:anemoto

argumentsのスコープを勘違いしていました。

bindメソッド内のargumentsとクロージャ内のargumentsを同一視していました。

分かりやすい説明ありがとうございました。

2009/03/20 01:03:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません