Javascript中的this详解
*本文代码中使用的 function dump(v,title), 是一个自己写的输出变量描述的函数。
如果你准备在JavaScript中写类,那么你必需对关键字 this 的使用有深刻的理解:
这是JavaScript手册中对 this的简单解释:
this:指当前对象。
对于 JScript 的客户版本,如果在其他所有对象的上下文之外使用 this,则它指的是 window 对象。
在全局环境下的 this
通常我们认为,Javascript 不在任何函数,不在任何类中,直接书写运行的代码的环境,称为直接运行环境,或者全局环境。实际上这个环境并不是一个真正意义上全局环境,
运行下面的代码:
1 | dump( this , 'Global This' ); |
我们可以得到输出结果:
■ Global This: object – [object Window]
[The window Object]
可以看到,在这个环境下,this 等于 浏览器的原生对象 window ,它是原生类 Window 的实例。
事实上,当我们在浏览器中运行JavaScript代码时,windows 是所有代码的根节点,所有的代码都是存储并挂接于这个节点的,当然多窗口的环境下会有多个window对象。
1 | function Car(){ |
2 |
3 | } |
4 | dump(Car); |
5 | dump(window.Car); |
输出结果:
■ function function Car() { …
■ function function Car() { …
可以看到 Car 和 window.Car 是完全相同的东西
在类中使用 this
现在我们来看看当使用类的时候,this会发生什么样的变化。下面是一段典型的类定义代码,我们来逐步分析:
01 | function Car(color,doors){ |
02 | //用构造模式定义属性 |
03 | this .color = color; |
04 | this .doors = doors; |