blog

JS関数内で thisを使ういくつかのケース

この場合、obj.fnなので、出力はWindowオブジェクトのnameプロパティです。 arrow関数のthisは、それが宣言されたスコープのthisをキャプチャします。 特別な注意: 一度キャプチャ...

Jan 13, 2021 · 2 min. read
シェア

this

thisは実行の対象。

ポイント

関数が実行されたら、その前にドットがあるかどうかを確認します。ドットがあれば、その前にいる人は誰でもthisとなり、ドットがなければthisはwindowとなり、strictモードでは未定義となります。

function fn(){
 console.log(this);
}
fn();
//=> Window
"use strict" function fn(){ console.log(this); } fn(); //=> undefined
var name = "Lily";
function fn(){
 console.log(this.name);
}
var obj ={
 "name":"LiHua",
 fn:fn
}
obj.fn();
//=> "LiHua"
fn();
//=>"Lily"

回答: この場合、obj.fn()なので、fnが実行されると thisがobjになり、実行されないとfn()になり、出力はWindowオブジェクトのname属性になります。

自己実行関数 this.

自己実行関数の thisはWindowですが、これはストリクトモードでは未定義です。

(function(){ console.log(this); })() //=> Window

ページ上の要素へのイベントの結合

イベントをページ上の要素にバインドし、イベントがトリガーされると、関数内の thisは現在バインドされている要素になります。

var box = document.getElementById("box"); box.onclick = function(){ console.log(this); } //=> ここでの thisは、バインドされたエレメント・オブジェクト・ボックスである。

コールバック関数内の this。

コールバック関数の thisはWindowで、ストリクトモードでは未定義ですが、もちろん特殊なケースもあります。

コールバック関数:関数を別の関数に実引数として渡す

コンストラクタの this。

コンストラクタの thisは現在のインスタンスです。

矢印関数内のthis。

アロー関数やブロックレベルのスコープは独自の thisを持たず、その中の thisはコンテキストの thisを使用します。

アロー関数の thisは、それが宣言されたスコープの thisをキャプチャします。

特記事項: thisは一度キャプチャされると、二度と変更されることはありません。call、apply、bindによって変更されることはありません。

call/apply/bind

call/apply/bindに基づいて、thisを強制的に変更することができます。

var name = "Lily"; function fn(){ console.log(this.name); } var obj ={ "name":"LiHua", fn:fn } fn.call(obj); //=> "LiHua"

call

call(x,y)。

引数x:関数内で thisをxに変更し、即座に実行。

パラメータ y: 関数内で渡されるパラメータ

Read next

React Native Expoチュートリアルを翻訳する(5) - タブ・ナビゲーション・コンポーネント

モバイルアプリでおそらく最も一般的なナビゲーションのスタイルは、タブベースのナビゲーションです。これは、画面下部のタブであったり、ヘッダー下の上部タブであったりします。 このガイドでは、これについて説明します。また、Ma...

Jan 12, 2021 · 3 min read