2021年2月11日木曜日

javascript thisについて

オブジェクト中のthisは、紛らわしい動作をする場合がある。

var message = 'aaaa';
let obj1 = {
    message : 'Hello',
    func1: function(){alert(this.message);}
}

obj1.func1();      // Hello   #thisは、obj1

let func2 = obj1.func1;
func2();           // aaaa    #thisは、window
func2.call(obj1);  // Hello  明示的にthisを指定することができる。

setTimeout(function(){obj1.func1();}, 1000);  // Hello
setTimeout(obj1.func1, 1000);                 // aaaa
setTimeout(obj1.func1.bind(obj1), 1000);      // Hello  bindでthisを決めてしまうこともできる。


callbackにobj1.func1で渡すと、thisは、obj1にならず、windowになる。
"use strict"をつけると
func2();は動作しない。

0 件のコメント:

コメントを投稿