大家都知道,**this可以用在构造函数之中,表示实例对象。**除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。
记住:this就是属性或方法“当前”所在的对象。
另外,一个需要注意的是:
只要函数被赋给另一个变量,this的指向就会变。
上面代码中,obj.getName方法被赋值给变量fn1,那么这个方法getName内部的this就会指向fn1运行时所在的对象,即window,我们可以试一试下面代码证实一下:
var obj = {
name:'Dean',
city:'Hefei',
hairColor:'Black',
height:173,
getName: function(){
console.log(this);
return 'name: ' + this.name;
}
}
console.log(obj.getName()); //输出name: Dean
var name = 'wade';
var fn1 = obj.getName;
console.log(fn1()); //输出name: wade
输出结果:
蓝色框内是this指向的obj对象,红色框内是this指向的window对象
看一个网页编程的例子:
<body>
<input type="text" name="age" size=3 onchange="validate(this,18,99);">
<script>
function validate(obj, min, max) {
if ((obj.value < min) || (obj.value > max)) {
alert('Invalid Value!');
}
}
</script>
</body>
上面代码是一个文本输入框,每当用户输入一个值,就会调用onchange回调函数,验证这个值是否在指定范围。浏览器会向回调函数传入当前对象,因此this就代表传入当前对象(即文本框),然后就可以从this.value上面读到用户的输入值。
总结一下,JavaScript 语言之中,一切皆对象,运行环境也是对象,所以函数都是在某个对象之中运行,this就是函数运行时所在的对象(环境)。这本来并不会让用户糊涂,但是 JavaScript 支持运行环境动态切换,也就是说,this的指向是动态的,没有办法事先确定到底指向哪个对象,这才是最让初学者感到困惑的地方。
本文参考了网道的这篇文章网道 | this 关键字