一个函数中的this
关键字被称为调用上下文。
1)如果你定义函数作为一个对象的一个成员(方法):
myObject.someMethod = function() { this.x = 2; };
然后调用上下文,this
,是在其中添加,myObject
方法的对象。所以在上面调用myObject.someMethod();
之后,myObject.x
就是2.成员x
在您调用方法之前是未定义的,除非您之前已经定义了它。
2)如果您使用的功能与new
关键字构造函数,然后this
指的是正在创建新的对象:
function MyX() { this.x = 3; };
var myX = new MyX();
然后您就拥有财产myX.x
设置为3
请注意,我打电话给我的构造函数MyX()
而不是myX()
。你应该打电话给你Person()
,而不是person()
。这只是一个约定,但是指出一个函数是用作构造函数是有用的。
3)最后,如果你,你呼叫作为既不是方法,也不是一个构造函数内使用this
,然后this
指全局对象(document
或,等价地,window
)。但请注意,如果您在strict
模式下使用javascript(您应该这样做),则this
在这种情况下未定义,这意味着您基本上不能在不是方法或构造函数的函数中使用this
。
您的具体问题涉及情况2),构造函数。构造函数中的this.x = 3
只是设置新创建对象的属性x
。创建某个对象myX
后,可以使用myX.x
作为任何其他对象属性在外部访问和修改x
。
因为在函数的第二个版本中,变量在函数中的作用域和行为类似于C#/ Java/PHP中的私有声明等。 – Chandu 2012-03-06 13:02:42
因为函数中的var将设置局部变量 – androidavid 2012-03-06 13:03:51
https ://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects – nnnnnn 2012-03-06 13:04:25