JavaScript this
thisは使い方によって指すものが変わります。今回はその例をやります。サンプル
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScriptのテストページ</title>
</head>
<body>
<button id="btn1" name="属性" >メソッド呼び出し</button>
<button id="btn2" name="属性" >メソッド→関数呼び出し</button>
</body>
<script>
// 変数
var name = "グローバル"
// オブジェクト
var obj = {
name: "ローカル"
};
// オブジェクトのメソッド
obj.alert = function() {
alert("オブジェクトのメソッド:" + this.name);
};
// thisの中身を表示
function show(){
// 関数
alert("関数:" + this.name);
// メソッド
obj.alert();
}
// ボタン(メソッド呼び出し)
var btn1 = document.getElementById("btn1");
btn1.onclick = show;
// ボタン(メソッド→関数呼び出し)
var btn2 = document.getElementById("btn2");
btn2.onclick = function() {
// 関数
alert("イベント:" + this.name);
show();
};
// HTML読み込み時のthisを表示
show();
</script>
</html>
上記サンプルでは、HTML読み込み時とボタン押下時に関数とオブジェクトのメソッドでthisを使ってメッセージを表示しています。
実行結果は以下になります。
表示タイミング | 呼び出し | 表示内容 |
---|---|---|
起動時 | 関数 | グローバル |
オブジェクトのメソッド | ローカル | |
ボタン(メソッド呼び出し) | 関数 | 属性 |
オブジェクトのメソッド | ローカル | |
ボタン(メソッド→関数呼び出し) | イベント | 属性 |
関数 | グローバル | |
オブジェクトのメソッド | ローカル |
オブジェクトのメソッドはすべて「ローカル」を表示しますが、関数は呼び出し方により「グローバル」、「属性」を表示したりします。
関数呼び出し時のthisについて
メソッドから呼ばれる場合、thisはオブジェクトを指し、関数から呼ばれる場合は全体(window)を指します。※メソッドはオブジェクト内の関数、関数は単体で動作するものを指しています。
サンプルのbtn1ではonclickにshow関数をセットしているので、show関数はbt1オブジェクトのメソッドとして扱われ、
btn2ではonclickに無名関数をセットし、その中でshow関数を呼んでいるので、show関数は関数として扱われます。
ページのトップへ戻る