ECMAScript v3では、これら2つの方法が関数プロトタイプに対して定義されています。これら2つの方法の関数は同じです。これら2つの方法を使用すると、他のオブジェクトメソッドを呼び出すなどの関数を呼び出すことができます。この文は本からコピーされましたが、少なくとも私はこれが何を意味するのか理解していませんでした。
シンプルで理解しやすいことについて話しましょう。まずコードを見てみましょう。
コードコピーは次のとおりです。
関数の紹介(名前、年齢)
{
document.write( "私の名前は"+name+"。私は"+age);
}
var p = new People();
はじめに.Call(P、 "Windking"、20);
上記のコードについて話しましょう。通話を使用した後、はじめにpの方法になります。あなたがこれを理解しているのだろうか?通話方法を使用すると、上記のコードはこのコードと同等です。
コードコピーは次のとおりです。
関数担当者(名前、年齢)
{
this.name = name;
this.age = age;
this.introduce = function(){
document.write( "私の名前は"+name+"。私は"+age);
};
}
あなたは意味を理解していますか?同じ関数を適用します。
わかりました、この方法を実際に使用できますが、最初に文法について話しましょう。
呼び出しは、少なくとも1つのパラメーターを受け入れます。呼び出しの最初のパラメーターは、必要なオブジェクトを指します。たとえば、上記の例では、導入方法では、オブジェクトPで呼び出されることを期待しているため、Pが呼び出しの最初のパラメーターとして使用されることを期待しています。残りのパラメーターの数は任意であり、導入方法のパラメーターとして使用されます。順序は、導入パラメーターによって宣言されています。たとえば、introduce.call(p、 "windking"、20)、introduceがPの例の方法である場合、これが意味するものです:p.introduce( "Windking"、20)。わかりますか?着信パラメーターの順序は、関数宣言パラメーターの順序と一致する必要があることを忘れないでください。
通話を理解した後、適用方法は理解しやすいです。適用と呼び出しの唯一の違いは、コールが少なくとも1つのパラメーターを受け入れるのに対し、Applyは2つのパラメーターのみを受け入れることです。最初のパラメーターは呼び出しと同じであり、2番目のパラメーターはサブスクリプトを備えたセットです。たとえば、はじめに.call(p、 "Windking"、20)をindution.apply(p、["windking"、20])に書き直すことができます。今回はわかりますか?
では、これら2つの方法の使用は何ですか?上記の機能を実装したい場合は、紹介を人々として実装する方が良いのではありませんか?
アプリケーションを2つに要約します。
1。共有方法。最初にコードを見てみましょう:
コードコピーは次のとおりです。
関数の紹介(名前、年齢)
{
document.write( "私の名前は"+name+"。私は"+age);
}
これは自己紹介方法です。ここで、男の子のクラスと女の子のクラスがあるとしましょう(私はここでデモンストレーションのためだけです。実際には、人々の親クラスが使用されます)。
コードコピーは次のとおりです。
function boy()
{
this.boyintroduce = function(){
はじめに.call(this、name、age);
};
}
同様に、同じことが女の子にも当てはまるので、コードを書くことを避けることができます。実際、これは少し遠いです。なぜなら、次のように書くことができるからです。
コードコピーは次のとおりです。
function boy()
{
this.boyintroduce = function(){
はじめに(名前、年齢);
}
}
しかし、この時点で、適用を使用すると、はるかにシンプルに見えます。
コードコピーは次のとおりです。
function boy()
{
this.boyintroduce = function(){
はじめに.Apply(This、arguments);
};
}
もっと簡単ではありませんか?多くのパラメーターがある場合は、そのような一連の密なパラメーターを書く必要はありません!
2。クロスドメインコール
簡単な例を参照してください(デモンストレーションのみ、値なし):
コードコピーは次のとおりです。
機能ボーイ(名前、年齢)
{
this.boyintroduce = function(){
document.write( "私の名前は"+name+"。私は"+age);
}
}
機能ガール(名前、年齢)
{
}
これは男の子と女の子のクラスで、次のコードを書きます。
var b = new Boy( "Windking"、20);
b.boyintroduce();
これに異議はありません。いつか自分自身を紹介し、偶然それを使用したい女の子がいるとしましょう。他の女の子は恥ずかしがり屋で、自己紹介をしたくないので、女の子のクラスを変更する必要はありません。それから私はこの時にこれを行うことができます。
var g = new Girl( "xuan"、22);
はじめに.call(g、 "xuan"、22);
3。実際の使用 - 継承
さて、上記はすべて小さなトリックであり、優雅な場所ではありません。以下は、構造継承に使用される最も広く使用されている呼び出しと適用です。