jsのcallとappyの方法の勉強


1、方法の定義
コールの方法: 文法:call([thisObj],arg 1[,arg 2[,   [..argN]]] 定義:現在のオブジェクトを別のオブジェクトに置き換える方法を呼び出します. 説明: コール方法は、他のオブジェクトの代わりに一つの方法を呼び出すために使用されてもよい.call方法は、関数のオブジェクトコンテキストを初期のコンテキストから、thisObjによって指定された新しいオブジェクトに変更することができる. thisObjパラメータが提供されていない場合、GlobalオブジェクトはthisObjとして使用される. アプリ方法: 文法:appy([thisObj[,argAray]) 定義:オブジェクトを別のオブジェクトに置き換える方法を適用します. 説明: もしargArayが有効な配列ではないか、またはargmentsオブジェクトではないなら、TypeErrorを引き起こすことになります. argArayおよびthisObjのいずれかのパラメータが提供されていない場合、GlobalオブジェクトはthisObjとして使用され、任意のパラメータを伝達することができない.
 
2、常用例
a、
 この例ではsub、add.call(sub、3、1)=add(3、1)をaddで置換するという意味ですので、運転結果は:alert(4);/注意:jsの関数はオブジェクトであり、関数名はFunctionオブジェクトへの参照です.
 
b、
function Animal(){  
    this.name = "Animal";  
    this.showName = function(){  
        alert(this.name);  
    }  
}  

function Cat(){  
    this.name = "Cat";  
}  
 
var animal = new Animal();  
var cat = new Cat();  
  
//  call apply  ,     Animal   showName()      cat    。  
//     "Cat"  
animal.showName.call(cat,",");  
//animal.showName.apply(cat,[]);
 callとはanimalの方法をcatに置いて実行するという意味です.元々はcatはshowNameの方法がないので、今はanimalのshowNameの方法をcatに置いて実行します.だから、this.nameはCatであるべきです.
 
c、継承の実現
 function Animal(name){    
     this.name = name;    
     this.showName = function(){    
         alert(this.name);    
     }    
 }    
   
 function Cat(name){  
     Animal.call(this, name);  
 }    
   
 var cat = new Cat("Black Cat");   
 cat.showName();
 アニマル.callとは、アニマルオブジェクトをthisオブジェクトの代わりに使用するという意味で、アニマルのすべての属性と方法がCatにあるのではないでしょうか?
 
d、複数引継ぎ
function Class10()
{
    this.showSub = function(a,b)
    {
        alert(a-b);
    }
}

function Class11()
{
    this.showAdd = function(a,b)
    {
        alert(a+b);
    }
}

function Class2()
{
    Class10.call(this);
    Class11.call(this);
}
 簡単です.二つのcallを使って多重継承を実現しました.もちろん、jsの継承には他の方法があります.例えば、プロトタイプチェーンを使って、これは本文の範疇ではなく、ここでcallの使い方を説明します.callと言っても、もちろんappyがあります.この二つの方法は基本的には一つの意味です.違いはcallの二つ目のパラメータは任意のタイプでもいいです.appyの二つ目のパラメータは配列でなければなりません.argmentsとcalerでもいいです.