最初にMDNでのコールの説明を見てみましょう
call()メソッドは、指定されたこの値といくつかの指定されたパラメーター値を使用して関数またはメソッドを呼び出します。
注:このメソッドの関数は、Apply()メソッドの関数と類似しており、1つの違いのみ、つまりcall()メソッドはいくつかのパラメーターのリストを受け入れます。一方、Apply()メソッドは複数のパラメーターを含む配列を受け入れます。
文法
fun.call(thisarg [、arg1 [、arg2 [、...]]]])
パラメーター
thisarg
この値は、楽しい関数が実行されているときに指定されています。指定されたこの値は、関数が実行されたときに必ずしもこの値を意味するものではないことに注意する必要があります。この関数が非厳密なモードである場合、この値はnullおよび未定義として指定され、グローバルオブジェクト(ブラウザ内のウィンドウオブジェクト)を自動的に指し、元の値(number、string、boolean value)のこの値は、元の値の自動ラッピングオブジェクトを指します。
arg1、arg2、...
指定されたパラメーターリスト。
MDNの例は、最初は理解するのが簡単ではありませんでした。ここに投稿しました。興味がある場合は、Call-JavaScriptを自分でチェックアウトできます。
ここのthisargは、楽しみが実行されたときに指定されたこの値として解釈されます。コードを見てください
var p = "456";関数f1(){this.p = "123"; } function f2(){console.log(this.p); } f2(); // 456 f2.call(f1()); // 123 f2.Apply(f1()); // 123最初の出力は、呼ばれるグローバル変数です。後で、通話と適用の使用により、これはF2をF1に指しているため、出力は123になります。実際、F1はF2の方法を借用し、独自のPを出力します。
現時点では、F1()でthis.pを削除すると3つの456が出力されます。これにより、これがnullまたは未定義の場合、実際にグローバル変数を指していることが確認されます。
元の値を指すラッピングオブジェクトに関しては、私が理解しているラッピングオブジェクトは一時的であり、オブジェクトの代わりにテスト中に元の値のタイプのみが出力されるため、ここでそれを証明する方法は、私と話し合うことを望んでいる場合に私と話し合うことができることを知っている場合、ありがとう!
コールは1つのオブジェクトを実装して別のオブジェクトを借りることができるため、継承を実装できますか?コードを見てください
function f1(){this.father = "father"} function f2(){f1.call(this); this.child = "child"; } var test = new f2(); console.log(test.father); //父親f2()では、テスト中に父親はいません。
f1.call(this);
これはここでF2を指します。つまり、F2はF1の方法を借用し、実際に継承を実現します。
ここでパラメーターについて話しましょう。ここのパラメーターは楽しみに渡されます。コードを見てみましょう
関数f1(){this.p = "123"; }関数f2(x){console.log(this.p); console.log(x); } f2.call(f1()、456); // 123 // 456123の出力は、F1のPとその後の456がF2に渡されたパラメーターであるためです。これは理解しやすいためです。
主に、呼び出しと適用のパラメーターの違いに注意してください
通話は1つずつ渡されますが、適用はに渡された配列があります
function f1(){this.p = "test call"; }関数f2(x、y、z){console.log(this.p); console.log(x); console.log(y); console.log(z); }関数f3(){this.p = "test apply"; } f2.call(f1()、4,5,6); f2.call(f1()、[4,5,6]); F2.Apply(f3()、[4,5,6]); f2.Apply(f3()、4,5,6);ここで結果を見ることができます
最初のテスト呼び出しは正しい出力です
2回目のテスト呼び出しは配列で渡されるため、1つの配列は最初の出力と2つの未定義です
3番目の段落テストは、正しい出力を適用します
4番目の段落は、パラメーター形式のエラーによるエラーを直接報告しました
ここでの違いは明らかです