js では、this キーワードは興味深いものですが、その方向性は初心者を混乱させることがよくあります。
実際、このキーワードを理解するには、「メソッドの呼び出しとメソッドのトリガー」という 2 つの問題を明確にする必要があります。
次に、コードを見てみましょう
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>function</title> <script> function showThis(){ console.info(this); } function Test1(){ this.f=showThis; } function Test2(){ this.f=function(){ showThis(); } } showThis();//window new Test1().f();//Test1 new Test2().f();//window </script> </head> <body> </body> </html>
20行目はwindowオブジェクトを出力しているのでわかりやすいですが、21行目はTest1のインスタンスオブジェクトを出力し、22行目はwindowオブジェクトを出力しています。 Test1 と Test2 の構造を見ると、メソッド f が最終的に showThis メソッドを実行していることがわかりました。しかし、showThis のこの点は異なります。これは、Test1 の f メソッドが showThis を直接ポイントしており、new Test1().f() が Test1 のインスタンスを使用して showThis メソッドを直接呼び出しており、呼び出し元が Test1 のインスタンスであるためです。そして、新しい Test2().f() は、Test2 のインスタンス メソッド f 内のウィンドウ オブジェクトの showThis メソッドをトリガーします。ここで、これはトリガー元 Test2 のインスタンスではなく呼び出し元ウィンドウを指します。
今すぐ見つけられます。これは呼び出し元を指しており、トリガーは呼び出し元に指定されたメソッドを実行するようプッシュするだけです。