function ohsoto(){ var result = 0; for(var w=0;w<arguments.length;w++){ result += arguments[w]; } this.result = result; } var n1 = {}; var n2 = {}; ohsoto(1,2,1);//1 assert(true,this.result); ohsoto.apply(n1,[1,2,3,4,"five"]);//2 ohsoto.call(n2,1,2,3,4);//3 ohsoto.call(this,1,2,3);//4 assert(true,n1.result); assert(true,n2.result); assert(true,this.result);●1のohsoto関数呼び出し。これはこのまま呼び出してるだけなので、普通の挙動です。
●2のapply。これはあとからn1がthisとして呼ばれていることがわかります。
●3のcall。これも2と同様、n2がthisとして呼ばれていることがわかります。
●4のcall。これは、Globalなthisで呼んでるのがわかります。実はこれだけでは、thisを指定して呼べる以外、何の意味があるかわかりません。
でも、CALLBACKとかすると、初めてなんとなく意味がわかります。
とりあえず、結果は以下。
★では、callBackを使用したサンプルコード
function foreacher(list,callback){ for(var w=0;w<list.length;w++){ callback.call(list[w],w); } } var waza=["背負投","払腰","袖釣込腰","内股すかし","出足払い"]; foreacher(waza, function(idx){ assert(this == waza[idx],waza[idx]); } );
●うん。なんとなく使い方がわかってきた。
javascriptをjavascriptらしくかくと、たぶん、無名関数が続出する結果となる。(と思う(o^^o)
よって、無名関数内でのthisと変数スコープは重要。この件はまたそのうち。
しかし、よく見ると上記のサンプルは妙である。
【javascriptのthisってなんだかわけわからん】
ともいえる。
これは次回にしよう。。(o^^o)
0 件のコメント:
コメントを投稿