JavaScript関数の他の属性と方法

5104 ワード

一、length属性:
length属性は、関数が受信したい名前付きパラメータの個数を表します.
function box(name, age) {

    alert(name + age);

}

box("  ",20);

alert(box.length);         //2             
 
 
 
 
二、プロタイプの属性
プロトタイプ 下には2つの方法があります.apply()とcall()は、それぞれの関数に引き継ぎではない2つの方法が含まれています.
   これらの2つの方法の用途はいずれも特定の作用領域で関数を呼び出すが、実際には関数内のthisオブジェクトを設定する値に等しい.
   
1、アプリ()の方法
function box(num1,num2){

        return num1+num2;

    }

    alert(box(10,10));  //   20

    

    function sayBox(num1, num2) {

        return box.apply(this, [num1, num2]);             //this      ,    window  []   box       

    }

    alert(sayBox(10,10));//    20            box        sayBox         ,    box     ,  sayBox        
ボックス関数のパラメータが多すぎると、次のような方法が使えます.
  function box(num1,num2){

        return num1+num2;

    }

    alert(box(10,10));  //   20

    

    function sayBox(num1, num2) {

        return box.apply(this,arguments);            //arguments      box       

    }

    alert(sayBox(10,10));//    20            box        sayBox         ,    box     ,  sayBox         

    alert(sayBox(10,90,90,20));//             ,box          ,                
 
2、コールの方法
  function box(num1, num2) {

        return num1 + num2;

    }

    alert(box(10,10));     //20

    

    function callBox(num1, num2) {

        return box.call(this, num1, num2);         //  apply          

    }

    alert(callBox(10,10));    //20
 call()メソッドはappy()方法と同じで、彼らの違いはただ受信パラメータの方式が違っているだけです.call()法に対して,最初のパラメータは作用領域であり,変化はなく,残りのパラメータだけが直接関数に伝達される.
 
 
 
 
三、apply()とcall()方法その他の使用場所
実際には、パラメータの伝達は、apply()とcall()の方法の真の使用の場所ではない.それらがよく使用される場所は、関数を拡張して動作させることができるスコープである.
  var color = '   '; //   window.color = '   ';  

    var box = {

        color : '   '

    };

    

    function sayColor() {

        alert(this.color);

    }

    

    sayColor();                     //     window

    sayColor.call(this);             //     window

    sayColor.call(window);           //     window

    sayColor.call(box);             //     box,    
私たちがcall(box)方法を使うと、sayColor()方法の運行環境はすでにboxの対象になっています.call()またはappy()を使って作用領域を拡張する最大の利点は、オブジェクトが方法との結合関係を一切必要としないことである(結合とは、相互に関連した意味で、拡張と維持が連鎖反応する).
つまり、boxオブジェクトとsayColor()方法との間には、box.sayColor=sayColorなど、余計な関連操作はありません.