ホームページ > 記事 > ウェブフロントエンド > Javascript_javascript スキルにおけるこのキーワードの詳細な分析
まず結論を言いますと、「JavaScript では This キーワードは常に関数 (メソッド) の所有者 を指します」です。
関数
前の記事 (JavaScript スコープ) で述べたように、グローバルに定義された関数の場合、関数の所有者は現在のページ、つまりウィンドウ オブジェクトです。
グローバルに定義された関数は実際にはウィンドウ オブジェクトのメソッドであるため、関数を引用符で囲んでいるのはこのためです。
したがって、関数名を介して直接呼び出すことも、ウィンドウ メソッド名を介して呼び出すこともできます。このとき、メソッド内の this キーワードはその所有者であるウィンドウ オブジェクトを指します。
ウィンドウの導入属性を見ると、次の結果が得られます:
答えは「はい」です。紹介機能を呼び出すと、私が Laruence であることがわかります。
イベントハンドラー関数
おそらく、このキーワードに関する混乱のほとんどは、イベント処理での関数 (メソッド) の使用に由来しています。
function showValue() {
alert(this.value);
}
document.getElementById('name').onclick = showValue;
はは、この質問を思いつくことができたということは、あなたが私の記事を真剣に読んでいることを意味します。そうでない場合は、最初から読むことをお勧めします。そうしないと、読んだ後も混乱するでしょう~
そうですね、上記のコードでは showValue がグローバル オブジェクトで定義されているため、onclick イベントがバインドされている場合にのみ問題が発生する可能性があるようです。
関数には実行可能な内部プロパティがあることを除いて、JS 内のすべてがオブジェクトであり、関数とメソッドもオブジェクトのプロパティであることがわかっています。したがって、上記のコードでは、プロセッサを onclick にバインドするときに、実際には、name という ID を持つ入力ボックス Dom オブジェクトの onclick 属性に値を割り当てます。
つまり、名前入力ボックス オブジェクトの onclick 属性に関数 showValue Copy を与えます。このときの onclick を見ると:
ただし、次のような書き方があり、混乱することがあります:
そうですね、現時点では、それは課題ではなく、参考になるためです。
onclick の 2 つの記述方法に注目すると、前のメソッドでは以下を使用したことがわかります。
dom.onclick = showvalue; //呼び出し元なし
今の方法は
onclick = "showvalue()" //呼び出し元があります
これは 2 つの違いを反映することもあります。前者では割り当て、後者では参照です。この時点で入力ボックスの onclick 属性を見ると、次のようになります:
alert(dom.onclick);
違いがわかりますか?その理由はわかりますよね?
これに関しては、非常に興味深い例があります。IE で試してみましょう。
このポイントを変更します
それでは、その理由が分かったので、どうすれば目的の場所に到達できるでしょうか?
上記のイベント処理関数は次のように記述できます:
dom.onclick = showValue();
dom.onclick = function() {alert(this.value) ;}
コードをコピーします コードは次のとおりです:
関数導入() {
アラート(this.name);
}
introduce.call(larence);