假设document是HTML文档中的一个节点,点击该节点后会发生什么?
function test() { this.flag = false; this.change = () => { this.flag = true; console.log(button.flag); }; } const button = new test(); document.addEventListener("click", button.change);
试试分析一下:
new test()
的方式来得到的,new返回的对象,this指向对象本身。所以此时button.flag = false;
button.change
是一个箭头函数而不是普通的函数,所以他的this要取所在词法作用域的this,因为在test函数中,所以change
的this
就是test
的this
document
的时候触发函数执行。因为change
的this
是test
的this
也就是button
,所以这里将button
的flag
改为了true
。所以最后打印的就是true this
就会变成document
。此时打印document.flag
得到的就是true
;(谁调用this指向谁),而程序的输出结果就会变成false
function test() { this.flag = false; this.change = () => { this.flag = true; console.log(button.flag); }; } const button = new test(); button.change(); console.log(flag) //undefined