179日目
整理する
Javascriptで難しい部分を聞かれたら
this
を選びます.ずっと勉強していましたが、まだ完全に理解していないので、このようなおおよその情報を身につけたような気がします.
でもブログを整理しながら整理するともっとわかりやすいので整理しておきます
主にコードクラスのthis講義を参照した.(リンク下部)
this
MDNの
this
の概要ほとんどの場合、
this
の値は、関数を呼び出す方法によって決定される.実行中の割当てでは設定できません.関数は呼び出し時に異なる場合があります.デフォルト値
this
ブラウザでコンソールを開き、this
と入力するとwindow
が得られます.このことから、実質的に
this
はwindow
である.ウィンドウで呼び出され、
window
オブジェクトが返されます.呼び出しメソッドによって決定されたことを示します
const someone = {
name: 'chan',
whoAmI: function() {
console.log(this);
}
};
const myWhoAmI = someone.whoAmI;
/* 1번 */
someone.whoAmI(); // {name: 'chan', whoAmI: f}
/* 2번 */
myWhoAmI(); // Window {}
第1の例は、
this
を呼び出すsomeone
オブジェクトである.したがって、this
はsomeone
である.第2の例は第1の例と同じように見え、Windowオブジェクトを返す理由は、第1の例呼び出し
whoAmI
の直接オブジェクトがsomeone
であるが、第2の例実行JavaScript
の基本環境がブラウザであるため、global呼び出しmyWhoAmI()
~this
はヘルプオブジェクトを生成する.someone.whoAmI
ボタンでaddEventListener
を動かすとどうなるのでしょうか.htmlファイル
...
<body>
<Button id='btn'></Button>
<script src='main.js'></script>
</body>
JSファイルconst someone = {
name: 'chan',
whoAmI: function() {
console.log(this);
}
};
const btn = document.getElementById('btn');
btn.addEventListener('click', someone.whoAmI);
上に作成したボタンを作成し、そのボタンをクリックするとどうなりますか?ボタンをクリックして
this
を表示し、次の結果を出力します.<button id='btn'>...</button>
なぜなら、直接呼び出し方法whoAmI
がbutton
であるからである.ほとんどの場合?
MDNには「ほとんどの場合」という言い方が使われています.それは例外があるということです.
ここでの例外は、
bind
、call
、apply
である.ここでは、
bind
を参照してください.this
が呼び出されても、this
がバインドされます.const someone = {
name: 'chan',
whoAmI: function() {
console.log(this);
}
};
const myWhoAmI = someone.whoAmI;
// 여기에서 myWhoAmI에서 this를 someone으로 바인딩 해보겠다.
const bindedWhoAmI = myWhoAmI.bind(someone);
const btn = document.getElementById('btn');
btn.addEventListenr('click', bindedWhoAmI);
上のボタンをクリックすると、this
が以下のようになります.{name: 'chan', whoAmI: f}
矢印関数でthis
矢印関数では、
this
がモジュールのようにバインドされます.関数を宣言すると、矢印関数は
this
にバインドするオブジェクトを静的に決定します.動的に決定された一般的な関数とは異なり、矢印関数のthis
は常に位相ミラーのthis
を指す.これをlexicalthis**といいます.厳格モード(strict)
厳格モードでは
this
の動作が異なる.厳格モードを使用しない場合、
this
は無条件に値を返します.(プロトタイプスクリーニングのためだと思います.)ただし、厳密モードの関数では、
window
では、関数のthis
オブジェクトを参照することはできません.参考資料
0秒-JavaScript this
コード種-this
MDN - this
PoiemaWeb-矢印関数
Reference
この問題について(179日目), 我々は、より多くの情報をここで見つけました https://velog.io/@pest95/179일차-thisテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol