在 Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象。一般在编译期确定下来,或称为编译期绑定。而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的, 那么JavaScript 中的 this究竟指代什么成为一个大的问题!
我在一片博文中看到这样的一个定论:“在Javascript中,This关键字永远都指向函数(方法)的所有者” ,我自身是比较赞同的。
(1)定义在全局的函数, 其实也就是window对象的一个方法.所以,我们即可用通过函数名直接调用, 也可用通过window.方法名来 调用, 这个时候, 方法中的this关键字指向它的所有者:window对象.
var name = "I am Laruence";
function introduce() {
alert(this.name);
}
alert(window.introduce);
(2)事件处理函数的this指代可能会让我们迷糊,也会质疑“在Javascript中,This关键字永远都指向函数(方法)的所有者” ,
例如:
<input id="name" type="text" name="name" value="nancy" />
function showValue() {
alert(this.value);
}
document.getElementById('name').onclick = showValue;
这个地方的this指代的是输入框Dom对象,这里可能会觉得这里不符合上面的定论。其实是符合的,对于上面的代码, 在对onclick绑 定处理器的时候, 其实是对id为name的输入框Dom对象的onclick属性赋值.也就是说, 我们把函数showValue Copy 给了name输入框对象的onclick属性. 在Js中一切都是对象, 函数和方法也都是对象的属性, 只不过函数有可执行的内部属性.
function showValue() {
alert(this.value);
}
<input id="name" type="text" name="name" value="Laruence" οnclick="showValue()"/>
这个地方的this指代window,所以alert(this.name)执行为undefined
那怎么才能让this指向我们想要指的地方呢?
<input id="name" type="text" name="name" value="nancy" />
function showValue() {
alert(this.value);
}
document.getElementById('name').onclick = showValue;
function showValue() {
alert(this.value);
}
<input id="name" type="text" name="name" value="Laruence" οnclick="showValue()"/>