2014年5月28日水曜日

javascriptを再学習の3【callとapply】

●まずはサンプルコードから
  1. function ohsoto(){  
  2.  var result = 0;  
  3.  for(var w=0;w<arguments.length;w++){  
  4.   result += arguments[w];  
  5.  }  
  6.  this.result = result;  
  7. }  
  8. var n1 = {};  
  9. var n2 = {};  
  10. ohsoto(1,2,1);//1  
  11. assert(true,this.result);  
  12. ohsoto.apply(n1,[1,2,3,4,"five"]);//2  
  13. ohsoto.call(n2,1,2,3,4);//3  
  14. ohsoto.call(this,1,2,3);//4  
  15. assert(true,n1.result);  
  16. assert(true,n2.result);  
  17. assert(true,this.result);  
●1のohsoto関数呼び出し。これはこのまま呼び出してるだけなので、普通の挙動です。
●2のapply。これはあとからn1がthisとして呼ばれていることがわかります。
●3のcall。これも2と同様、n2がthisとして呼ばれていることがわかります。
●4のcall。これは、Globalなthisで呼んでるのがわかります。
実はこれだけでは、thisを指定して呼べる以外、何の意味があるかわかりません。
でも、CALLBACKとかすると、初めてなんとなく意味がわかります。
とりあえず、結果は以下。

★では、callBackを使用したサンプルコード
  1. function foreacher(list,callback){  
  2.  for(var w=0;w<list.length;w++){  
  3.   callback.call(list[w],w);  
  4.  }  
  5. }  
  6.   
  7. var waza=["背負投","払腰","袖釣込腰","内股すかし","出足払い"];  
  8. foreacher(waza,  
  9.  function(idx){  
  10.   assert(this == waza[idx],waza[idx]);  
  11.  }  
  12. );  

●うん。なんとなく使い方がわかってきた。
javascriptをjavascriptらしくかくと、たぶん、無名関数が続出する結果となる。(と思う(o^^o)
よって、無名関数内でのthisと変数スコープは重要。この件はまたそのうち。

しかし、よく見ると上記のサンプルは妙である。
【javascriptのthisってなんだかわけわからん】
ともいえる。
これは次回にしよう。。(o^^o)

0 件のコメント:

コメントを投稿