[Javascript] this
11522 ワード
JavaScriptのthis
他の言語とは異なり、JavaScriptの独特な特性の一つは
このアイテムを単独で使用
これは単独呼び出しの場合です.単独で呼び出すとwindowを指します.
thisを単独で使用する場合、thisは
関数のthis
関数がこの関数を直接呼び出す場合は、windowを指します.次のようにします.
関数でthisを使用する場合は、
ただし、関数には、thisがグローバルオブジェクトを指さないようにする方法があります.これがArow関数を使う方法です.allow関数がグローバルに実行されている場合でも、allow関数のthisは外部関数またはクラスのthisを指します.
オブジェクトメソッドのthis
さっき見た2つの状況は、グローバルオブジェクトを指しています.したがって、これは実際にはグローバルオブジェクトを指していることに注意してください.これからは、グローバルオブジェクトではないことを議論します.
このオプションがオブジェクトメソッドで使用されている場合.
オブジェクトメソッドのthisは、メソッドを呼び出すオブジェクトを表します.
また、同じ名前のプロパティをオブジェクト内に追加し、同じメソッドを使用すると、このメソッドは最も近いオブジェクトを指します.
生成者のthis
ジェネレータの内部でthisを使う人をたくさん見たことがありますが、この場合thisは何を指していますか?
ジェネレータのthisは、作成したインスタンスオブジェクトを指します.
しかし、少し注意しなければならないことがあります.コンストラクション関数も関数の1つです.したがって、オブジェクトがnew演算子でインスタンス化されていない場合、コンストラクション関数ではなく汎用関数として認識され、グローバルオブジェクトを指します.
これらの問題はES 6にclassとconstructorコマンドを追加したときに解決された.new演算子の損失を防止します.また、コンストラクション関数コンストラクション関数で使用されるthisもインスタンスオブジェクトを指します.
イベントリスナーのthis
bind、call、applyのこの明示的なバインド
明示的なバインディング
このオブジェクトをbind()、call()、apply()メソッドで明示的にバインドすると、このメソッドはパラメータとして渡されるオブジェクトを指します.
リファレンス MDN - this Zerochブログ-this ナナのブログ
他の言語とは異なり、JavaScriptの独特な特性の一つは
this
の使い方です.this
は、状況によって異なるため、必要に応じてthis
を操作するには、明確にする必要があります.このアイテムを単独で使用
これは単独呼び出しの場合です.単独で呼び出すとwindowを指します.
const x = this;
console.log(x); //window
thisを単独で使用する場合、thisは
글로벌 객체
を指します.厳格モードで単独で使用されるthisはundefined
を指す.関数のthis
関数がこの関数を直接呼び出す場合は、windowを指します.次のようにします.
const func = () => {
return this; //window
};
関数でthisを使用する場合は、
글로벌 객체
を指します.Strictモードでは、undefined
も指します.ただし、関数には、thisがグローバルオブジェクトを指さないようにする方法があります.これがArow関数を使う方法です.allow関数がグローバルに実行されている場合でも、allow関数のthisは外部関数またはクラスのthisを指します.
オブジェクトメソッドのthis
さっき見た2つの状況は、グローバルオブジェクトを指しています.したがって、これは実際にはグローバルオブジェクトを指していることに注意してください.これからは、グローバルオブジェクトではないことを議論します.
このオプションがオブジェクトメソッドで使用されている場合.
const obj = {
x: 100,
printX: function() {
return this.x;
},
};
obj.printX(); //100
オブジェクトメソッドのthisは、メソッドを呼び出すオブジェクトを表します.
また、同じ名前のプロパティをオブジェクト内に追加し、同じメソッドを使用すると、このメソッドは最も近いオブジェクトを指します.
const obj = {
x: 100,
printX: function() {
return this.x;
},
};
obj.innerObj = {
x: 404,
printX: function() {
return this.x;
}
};
obj.innerObj.printX();
生成者のthis
ジェネレータの内部でthisを使う人をたくさん見たことがありますが、この場合thisは何を指していますか?
function Student(name, id) {
this.name = name;
this.id = id;
}
let student01 = new Student('무지', 101);
console.log(student01.name); //'무지'
console.log(student01.id); //101
ジェネレータのthisは、作成したインスタンスオブジェクトを指します.
しかし、少し注意しなければならないことがあります.コンストラクション関数も関数の1つです.したがって、オブジェクトがnew演算子でインスタンス化されていない場合、コンストラクション関数ではなく汎用関数として認識され、グローバルオブジェクトを指します.
これらの問題はES 6にclassとconstructorコマンドを追加したときに解決された.new演算子の損失を防止します.また、コンストラクション関数コンストラクション関数で使用されるthisもインスタンスオブジェクトを指します.
イベントリスナーのthis
이벤트 리스너
は、ウェブページ上でイベントが発生したときの動作を定義するコードである.document.body.addEventListdocument.body.addEventListener('click', function () {
console.log(this); //<body>
});
イベントリスナーがこのオプションを使用すると、イベントターゲットとしてDOM要素を指します.bind、call、applyのこの明示的なバインド
明示的なバインディング
this
は、指定されたターゲットを意味する.let sayYaho = {z: '야호'};
function whatIsThis() {
console.log(this);
};
whatIsThis(); //window
whatIsThis.bind(sayYaho).call(); //sayYaho 객체
whatIsThis.call(sayYaho); //sayYaho 객체
whatIsThis.apply(sayYaho); //sayYaho 객체
このオブジェクトをbind()、call()、apply()メソッドで明示的にバインドすると、このメソッドはパラメータとして渡されるオブジェクトを指します.
リファレンス
Reference
この問題について([Javascript] this), 我々は、より多くの情報をここで見つけました https://velog.io/@bami/Javascript-thisテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol