人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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 を
結合しているのでしょうか?

●質問者: 姉本
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:BIND JavaScript Prototype prototype.js ソースコード
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● susie-t
●60ポイント

最初の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");

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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ