1

我是 JS 新手,已经阅读了很多关于内容更改的怪癖行为this,所以我做了一个最简单的例子:

HTML

<button>button1</button>

JavaScript

var button1, getText

button1 = document.getElementsByTagName('button')[0]

getText = function(){alert(this.textContent)}

button1.addEventListener('click', getText)

http://jsfiddle.net/e95ME/

但我看不到this更改的上下文,因为代码有效。任何人都可以更改此代码或给出另一个简单的示例来显示内容更改的怪癖行为this

4

3 回答 3

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因为它是在按钮的上下文中调用的。

于 2013-02-13T02:48:56.137 回答
1

你是这个意思吗?

var button1, getText

button1 = document.getElementsByTagName('button')[0]

getText = function() {
    this.textContent = "changed content";
}

button1.addEventListener('click', getText)
于 2013-02-13T02:53:21.040 回答
0

单击按钮时,事件侦听器将设置this为 DOM 元素本身。

就好像你的函数是这样调用的:

getText.call(<button-element>, <event>)
于 2013-02-13T02:48:59.597 回答