我是JS的新手,并且已经阅读了很多关于this
内容更改的怪癖行为,所以我做了一个最简单的例子:
HTML
<button>button1</button>
的JavaScript
var button1, getText
button1 = document.getElementsByTagName('button')[0]
getText = function(){alert(this.textContent)}
button1.addEventListener('click', getText)
但由于代码有效,我无法看到this
的上下文发生了变化。任何人都可以更改此代码或提供另一个简单示例来显示this
内容更改的怪癖行为?
答案 0 :(得分:2)
var button1, getText
button1 = document.getElementsByTagName('button')[0]
getText = function(){alert(this.textContent)} // called in context of `button1`
button1.addEventListener('click', getText)
getText(); // called in context of `window`
当窗口加载时,它会显示undefined
,因为没有属性window.textContent
。当您单击该按钮时,它应该显示button1
,因为它是在按钮的上下文中调用的。
答案 1 :(得分:1)
你是说这个吗?
var button1, getText
button1 = document.getElementsByTagName('button')[0]
getText = function() {
this.textContent = "changed content";
}
button1.addEventListener('click', getText)
答案 2 :(得分:0)
单击该按钮时,事件侦听器会将this
设置为DOM元素本身。
就像你的函数被调用一样:
getText.call(<button-element>, <event>)