JSの中のコール()とappy()の方法

2108 ワード

JavaScriptにはcallとapplyの方法があります.その役割は基本的に同じですが、少し違いがあります.
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.
function add(a, b) {
    alert(a + b);
}

function sub(a, b) {
    alert(a - b);
}

add.call(sub, 3, 1);
この例では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,[]);
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でもいいです.