jsの中のコール()/apply()

1619 ワード

まず簡単な例を見ます.1+1=2はできますよね.
function add(a,b)

{

   alert(a+b);

}

function sub(a,b)

{

   alert(a-b);

}


add.call(sub,1,1); //    ? ‘2’    ‘0’  
ここでコードシートを書くと、1+1=2という人がいます.明らかに1-1=0になったという人もいますよね.  実はadd.call(sub,1,1);add(1,1)=2に等しい...
これは脳の障害ではないですか?余計なことをして、一挙にくそっというcallを作って、毛をかきますか?直接add(1,1)はだめですか?
よく分かりません.add.call(sub)です.きっとadd直接subの中の引き算です.じゃ、コールをして何をしますか?
どのような場面でcall、applyというきつい書き方が使われますか?
 

  • callとappyは関数の実行環境、すなわちthisの方向を再定義するために使用できます.callとappyはいずれも関数を変更するために動作しています.  contextとは文脈であり、換言すれば、関数体内部のthisの方向を変えるためである.何故なら JavaScript  の関数には「定義時文脈」と「実行時文脈」と「文脈は変えられます」という概念があります.
    コール():
  • 文法:call(Obj,[arg 1])
  • 私の口語文:
    call        ,sub      add         ,
    
    
      :add    , sub    ,  sub  , add    ,  sub     call     , call   add  
    
    
              sub     ,   sub     add  “  ”     ,    
    function changeStyle(attr, value)
    
    {
    
        this.style[attr] = value;
    
    }
    
    var box = document.getElementById('box');
    
    window.changeStyle.call(box, "height", "200px");
     
    ここで、changeStyle関数はboxオブジェクトに呼び出されます.thisはboxオブジェクトを指します.
    windowオブジェクトにはstyle属性がありません.アプリの使い方:
    window.chageSteyle.apply(box,[height],‘200 px’);
    現在window対象の「box」というdivの高さは直接200 pxになりました.
    window.chageStyle.call(box,「height」,「200 px」)
    box.style.height="200 px"に相当します.
    ここを見たら分かりますよね.まだ分かりません.
    この用法
    window.chageSteyle.apply(box,[height],‘200 px’);
    この書き方を見たら分かりますよね.えっと、実は書き方と形式が違っています.本質は同じです.
    配列の中だけで、thisを変えるために、
    これも、addの飛天スキルを盗むためですよ!
    括弧内のオブジェクトを括弧外の関数にまとめる属性です.継承と呼ぶことができます.