HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > TIPS 集

Javascriptでメソッド実行時のthisの振る舞いについて

文責:遠藤 理平 (2016年9月25日) カテゴリ:TIPS 集(107)

次のプログラムを実行した場合、コンソールに出力される値は何でしょうか?

//クラス「A」を宣言
var A = function(){}
A.prototype.f = function(){
	console.log(this); //thisをチェック
}
var a = new A();
a.f();

「this」はメソッドが呼び出された元となるオブジェクトを指すので、 上記のプログラムの場合にはAクラスのオブジェクトとなります。

次のプログラムを実行した場合、コンソールに出力される値は何でしょうか?

//クラス「B」を宣言
var B = function(){}
B.prototype.f1 = function(){
	console.log(this); //thisをチェック
}
B.prototype.f2 = function(){
	var f1 = this.f1;  //メソッドの参照をローカル変数にコピー
	f1();
}
var b = new B();
b.f2();  

上記のプログラムでは、メソッド内で利用するメソッドの参照をローカル変数へコピー後、実行しています。 この場合、メソッドそのものはローカル変数が呼び出された元となり、 「this」は「Window」オブジェクトを指すことになります。 メソッド内で他のメソッドを実行する場合にメソッド名を短くすることを目的として、上記のような実装を行うことがあります。 「this」の振る舞いには気をつける必要がありますね。

どのような呼び出され方をしても「this」を固定したい場合には「bind」メソッドを用いて「this」を固定します。

	var f1 = this.f1.bind( this );


タグ: ,

▲このページのトップNPO法人 natural science トップ

▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました