JavaScript_javascript スキルの電話と応募に関する学習メモ

WBOY
リリース: 2016-05-16 16:35:59
オリジナル
992 人が閲覧しました

まず MDN での呼び出しの説明を見てみましょう

call() メソッドは、指定された this 値と指定されたいくつかのパラメーター値を使用して関数またはメソッドを呼び出します。

注: このメソッドの機能は apply() メソッドに似ています。唯一の違いは、call() メソッドが複数のパラメーターのリストを受け入れるのに対し、apply() メソッドは複数のパラメーターを含む配列を受け入れることです。

文法

fun.call(thisArg[, arg1[, arg2[, ...]]]) 

ログイン後にコピー

パラメータ
thisArg

fun 関数の実行時に指定された this の値。関数の実行時に、指定された this 値が必ずしも実際の this 値であるとは限らないことに注意してください。関数が非厳密モードの場合、null および未定義として指定された this 値は自動的にグローバル オブジェクトを指します (ブラウザの場合はウィンドウ オブジェクトです)、値がプリミティブ値 (数値、文字列、ブール値) である this は、プリミティブ値の自動ラッピング オブジェクトを指します。

引数1、引数2、...

指定されたパラメータのリスト。

MDN の例は最初は理解するのが簡単ではなかったので、ここに投稿しました。興味がある場合は、call-JavaScript を自分で確認してください。

ここでの thisArg は、fun の実行時に指定された this 値として解釈されます。つまり、call を使用した後、fun の this は thisArg? を指します。コードを見てください

 var p="456"; 
 function f1(){ 
  this.p="123"; 
 } 
 function f2() { 
  console.log(this.p); 
 } 
 f2();       //456  f2.call(f1());  //123  f2.apply(f1());  //123

ログイン後にコピー

最初の出力は呼び出しのグローバル変数です。その後、call と apply を使用するため、f2 の this は f1 を指すため、出力は 123 になります。実際、f1 は f2 のメソッドを借用し、そのメソッドを出力します。自分のp

このとき、f1() 内の this.p を削除すると、456 が 3 つ出力されます。これは、this が null または未定義の場合、実際にグローバル変数

を指していることを確認します。

元の値を指すことに関して、それはそのパッケージ化オブジェクトを指します。私が理解しているパッケージ化オブジェクトは一時的なものであり、テストではオブジェクトではなく元の値の型のみが出力されるため、ここでそれを証明するにはどうすればよいでしょうか。知っている人はいますか、私と話し合っていただければ幸いです、ありがとう!

呼び出しは、あるオブジェクトが別のオブジェクトを借用することを実現できるので、継承も実現できないのでしょうか?コードを見てください

 function f1(){ 
  this.father="father"
 } 
 function f2() { 
  f1.call(this); 
  this.child="child"; 
 } var test=new f2(); 
console.log(test.father);  //father

ログイン後にコピー

f2() の

のため、テストには父親がありません。

f1.call(this);

ここでは f2 を指します。これは、f2 が f1 のメソッドを借用し、実際に継承を実現することを意味します

ここでパラメータについて話しましょう。ここでのパラメータは fun に渡されます。

 function f1(){ 
  this.p="123"; 
 } 
 function f2(x) { 
  console.log(this.p); 
  console.log(x); 
 } 
 f2.call(f1(),456);   //123 
//456

ログイン後にコピー

最初の出力は f1 の p により 123 で、次の 456 は f2 に渡されるパラメータです。

主なことは、呼び出しと適用のパラメータの違いに注意することです

call は 1 つずつ渡され、apply は配列で渡されます

  function f1(){ 
  this.p="测试call"; 
 } 
 function f2(x,y,z) { 
  console.log(this.p); 
  console.log(x); 
  console.log(y); 
  console.log(z); 
 } 
   function f3(){ 
  this.p="测试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 番目のテスト呼び出しは配列で渡されるため、最初に配列を出力し、次に 2 つの未定義を出力します

テスト適用の 3 番目のセクションは正しく出力されます

4 番目の段落は、パラメータ形式が正しくないためエラーを直接報告しています

ここでの違いは明らかです

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート