谁能解释这两个代码之间的区别?为什么第二个起作用而第一个起作用呢?

时间:2015-11-27 14:08:04

标签: javascript dom

HTML:

<input type="button" name="red" onclick="dis()">

这是JavaScript的第一个代码:

function dis() {
  alert(this.name)
}

这是工作版本:

HTML:

  <input type="button" name="red" onclick="dis(this)">

JavaScript的:

function dis(a) {
  alert(a.name)
}

1 个答案:

答案 0 :(得分:0)

在第一种情况下,您在全局范围内调用dis()。在这种情况下,this是全局对象

在第二种情况下,您还可以在全局范围内调用dis()。但是您将当前this值作为参数传递给函数。

要使第一个案例与第二个案例相同,您应该像这样重写:

<input type="button" name="red" onclick="dis.call(this)">

通过这种方式,您可以将当前this传递给函数。

这个的一般规则是查看函数左侧的内容(另一个词 - 被称为函数):

dis()     // -> on the left nothing stands, so `this` will correspond to global object
a.dis()   // -> on the left `a` stands, so `this` will correspond to `a`
new dis() // -> on the left `new` keyword stands, so `this` will correspond to newly created object