JavaScript の this キーワードは、新しい開発者にとって最もわかりにくい概念の 1 つである可能性があります。その値は使用される場所に応じて変化する可能性があるため、さまざまなコンテキストでの動作を理解することが重要になります。この記事では、さまざまなシナリオでの this キーワードの使用法を調査することで、このキーワードの謎を解き明かします。
JavaScript では、関数が実行されるコンテキストを指します。これは、オブジェクト自体の内部からオブジェクトのプロパティとメソッドにアクセスする方法を提供します。
グローバル コンテキスト (関数またはオブジェクトの外側) で使用される場合、これはグローバル オブジェクトを指します。 Web ブラウザでは、グローバル オブジェクトは window.
です。
console.log(this); // In a browser, this will log the window object
関数内で使用する場合、これは関数の呼び出し方法によって異なります。
通常の関数呼び出しでは、これはグローバル オブジェクト (厳密モードでは未定義) を参照します。
function showThis() { console.log(this); } showThis(); // Logs window (or undefined in strict mode)
関数がオブジェクトのメソッドとして呼び出される場合、これはオブジェクト自体を参照します。
const person = { name: 'Alice', greet: function() { console.log(this.name); } }; person.greet(); // Logs "Alice"
関数が new キーワードを使用してコンストラクターとして使用される場合、これは新しく作成されたインスタンスを参照します。
function Person(name) { this.name = name; } const bob = new Person('Bob'); console.log(bob.name); // Logs "Bob"
アロー関数の動作は異なります。彼らは独自の this コンテキストを持っていません。代わりに、周囲の語彙コンテキストからこれを継承します。
const obj = { name: 'Carol', regularFunction: function() { console.log(this.name); }, arrowFunction: () => { console.log(this.name); } }; obj.regularFunction(); // Logs "Carol" obj.arrowFunction(); // Logs undefined (or the global object in non-strict mode)
イベント ハンドラーでは、イベントを受信した要素を指します。
document.getElementById('myButton').addEventListener('click', function() { console.log(this); // Logs the button element });
JavaScript は、call、apply、bind を使用して this の値を明示的に設定するメソッドを提供します。
call メソッドと apply メソッドを使用すると、この値を指定して関数を呼び出すことができます。
function introduce() { console.log(`Hello, my name is ${this.name}`); } const person = { name: 'Dave' }; introduce.call(person); // Logs "Hello, my name is Dave" introduce.apply(person); // Logs "Hello, my name is Dave"
call と apply の違いは、引数の処理方法です。 call は引数を個別に受け取りますが、apply は引数を配列として受け取ります。
バインド メソッドは、呼び出されたときに this 値が指定された値に設定される新しい関数を作成します。
function introduce() { console.log(`Hello, my name is ${this.name}`); } const person = { name: 'Eve' }; const boundIntroduce = introduce.bind(person); boundIntroduce(); // Logs "Hello, my name is Eve"
JavaScript をマスターするには、this キーワードを理解することが不可欠です。これがさまざまなコンテキストでどのように動作するかを認識することで、より予測可能で保守しやすいコードを作成できます。メソッド、コンストラクター、またはアロー関数を使用しているかどうかに関係なく、これがどのように動作するかを知っていれば、よくある落とし穴を回避し、その能力を効果的に利用するのに役立ちます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3