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