ECMAScript v3 では、これら 2 つのメソッドが Function プロトタイプに定義されています。これら 2 つのメソッドの機能は同じです。これらの 2 つのメソッドを使用すると、他のオブジェクト メソッドを呼び出すのと同じように関数を呼び出すことができます。この文は書籍 I からのものです。上にコピーしましたが、少なくとも私はそれが何を意味するのか理解できませんでした。
以下はシンプルで理解しやすいので、最初にコードを見てみましょう:
上記のコードについて話します。call を使用すると、Introducing が p のメソッドになります。 call メソッドを使用すると、上記のコードは次のコードと同等になります:
この方法が実際にどのように使用できるかは別として、まず文法について話しましょう。
call は少なくとも 1 つのパラメータを受け入れます。たとえば、上記の例では、 Introduction メソッドはオブジェクト p によって呼び出されることを期待しており、最初のパラメータとして p を使用します。呼び出しパラメータの。残りのパラメータの数は任意であり、Introducing メソッドのパラメータとして機能します。順序は、導入パラメータが宣言された順序になります。たとえば、 Recommend.call(p,"Windking",20) の場合、 Introduction が p のインスタンス メソッドである場合、次のようになります: p. Introduction("Windking",20)。わかりますか?渡されるパラメータの順序は、関数内でパラメータが宣言された順序と一致している必要があることに注意してください。
call を理解すると、apply メソッドは理解しやすくなります。apply と call の唯一の違いは、call は少なくとも 1 つのパラメータを受け入れるのに対し、apply は最初のパラメータは call と同じであり、2 番目のパラメータだけを受け入れるということです。パラメーターは、添字のコレクションを持つパラメーターです。たとえば、紹介.call(p,"Windking",20) は、紹介.apply(p,["Windking",20]) として書き換えることができます。今回は分かりましたか?
では、これら 2 つの方法はどのような用途に使われるのでしょうか?上記の機能だけを実装したいのであれば、Peopleのメソッドとして紹介を実装すれば良いのではないでしょうか?
アプリケーションを 2 つの項目にまとめます:
1. 共有方法。まずコードを見てみましょう:
もっと簡単ではないでしょうか?パラメーターが多数ある場合は、そのような密集した一連のパラメーターを記述する必要はありません。
2. クロスドメイン呼び出し
簡単な例を見てみましょう (デモンストレーションのみのため、価値はありません):
これは Boy と Girl のクラスであり、次のコードを書きます:
var b=new Boy("Windking",20);
b.BoyIntroducer();
var g=new Girl("Xuan",22);
紹介.call(g,"Xuan",22);
上記はすべて簡単で洗練されていません。次に示すのは、構造継承に使用される、最も広く使用されている call と apply のアプリケーションです。