javascript的this关键字总是让人捉摸不透,this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,因为函数的调用场景不同,this的指向也不同。其实只要理解javascript语言的特性就很好理解this。在javascript中,函数可以直接调用:
function range(){
this.min = 5;
}
range()
console.info(min) ==> 5
这里函数range是在全局中运行的,所以this指向全局对象,在浏览器中全局对象是window。函数也可以作为对象的方法调用,如下:
var range = {
setmin : function(){
this.min = 5;
}
}
range.setmin();
console.log(min); ==> undefined
console.log(range.min) ==> 5
当作为对象方法调用时,this指向的是调用对象,而不是全局对象。
当函数作为构造函数时,和作为对象方法一样,this指向调用函数的对象。不重复赘述,还有javascript还提供apply和call方法来改变this绑定的对象。这里不详细讨论,你们可以自行百度一下apply和call方法是怎么改变this绑定对象的 。我们最后讨论讨论当this关键字在闭包中时的情况,下面的this在闭包中:
var range = {
setrange : function(){
this.min = 5;
var setmax = function(){
this.max = 100;
};
setmax();
}
};
range.setrange();
console.log(range.min); ==> 5
console.log(range.max); ==> undefined
console.log(max); ==> 100
这里max应该是作为range的属性,可实际上确是全局的,this指向了全局对象,按道理讲this.max的this应该绑定到外层函数的调用对象上,实际上绑定到了全局,是不是很神奇,这应该是javascript的一个设计缺陷。
个人对javascript中的this关键字的理解如上,如有不正,望指正,谢谢。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。