オブジェクト中の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 件のコメント:
コメントを投稿