为什么“this”关键字在这里不起作用?

时间:2014-03-01 20:01:17

标签: javascript this

<button onclick="test()">Will it work?</button>


function test() {
this.innerHTML = "It works!";
}

该按钮调用功能测试,因此它应受“this”关键字的影响。

2 个答案:

答案 0 :(得分:2)

将其传递给函数

<button onclick="test(this)">

function test(btn) {
    console.log(btn);
    btn.innerHTML = "it worked";
}

http://jsfiddle.net/KV27W/1/

答案 1 :(得分:1)

来自MDN documentation

  

在函数内部,其值取决于函数的调用方式。

     

简单的通话

function f1(){
  return this;
}

f1() === window; // global object
     

在这种情况下,调用不会设置this的值。由于代码不是严格模式,this的值必须始终是一个对象,因此它默认为全局对象。

因此,每当您将函数调用为func()时,this都会引用全局对象。而这正是你在这里所做的:

onclick="test()"

你是对的,事件处理程序中的this引用处理程序绑定的元素,但test不是事件处理程序,它在正文中一个事件处理程序。从属性值生成的处理程序看起来像

function(event) {
    test();
}

所以你看,这是一个简单的电话&#34;,所以毫无疑问this指的是什么。


如果您想要它,请参阅该按钮,然后您可以使用.call来呼叫test并明确将this设置为传递的值:

onclick="test.call(this)"
相关问题