JavaScriptのthisについて改めて復習したのでまとめる
-
new演算子をつけて呼び出す
new演算子は、new演算子をつけたその関数のprototypeオブジェクトをコピーして新規にオブジェクトを作り、それを関数に暗黙の引数this
として渡し、最後にreturn this
を実行する。 -
メソッドとして実行されたとき
Python同様、メソッドとして実行されたとき、アクセス演算子.
の前のオブジェクトがthis
をして渡される。
const foo ={
name: 'Foo Object',
dump() {
console.log(this).
),
}
foo.dump(); //{name:'Foo Object', dump[Function:dump]}
3. 1,2以外の関数[非Strictモード]:グローバルオブジェクト
JavaScriptにおけるトップレベルの実行環境は必ず何かのグローバルオブジェクト
になっている。そのため、デフォルトでthisはそのグローバルオブジェクトを参照している。そのため、メソッドではない関数、及びnew演算子をつけずに実行される関数は、グローバルオブジェクトがthisとして引き渡される。
const dump=function(){console.log(this);};
dump();
//ref 1 Object [global]{
global:[Circular1],
...
}
4 .1,2以外の関数[Strictモード]:undefined
元々のJavaScriptでは簡単にグローバルオブジェクトに対しての汚染が起こってしまっていた。そこでES5で「Strictモード」というものが追加された。これによって、古い仕様に含まれるいくつかの安全ではない構文や機能を禁止することができる。
このStrictモードによって、関数がメソッドでない、任意のオブジェクトのコンテキストになかった場合、this
にはundefined
が入る。
参考文献
[りあクト! TypeScriptで始めるつらくないReact開発 第3版【Ⅰ. 言語・環境編】] https://oukayuka.booth.pm/items/2368045
こちらを参考にさせていただきました。
ありがとうございます。