为什么我们在此代码段中使用了“this”关键字?

时间:2011-11-02 20:06:34

标签: javascript oop object this code-snippets

    var someObject = {
someArray : new Array(),

someInt : 0,

Total: function(){

this.someInt = 0;//we used "this" keyword here, why?Cant we just say "someInt = 0"?

for(var i=0;i<this.someArray.length;i++){//and here..

var c = this.someArray[i];//again we use "this"

this.someInt += c.value;//also here
}

那为什么我们使用“this”关键字?我们只能输入变量的名称?

7 个答案:

答案 0 :(得分:5)

this关键字是指稍后调用该对象的对象,即如果您调用此函数:

someObject.Total()

然后this将引用函数内的someObject。感谢this关键字,该功能可以修改someInt并从someArray读取someObject成员this。如果从函数体中删除{{1}},那么所有这些引用都将是全局变量或函数体本地的变量。

答案 1 :(得分:3)

不,语句someInt = 0不会修改someInt的{​​{1}} 属性。相反,它会修改全局/默认对象(浏览器中的someObject)上名为someInt的属性,这显然不是您想要的。

请注意(取决于您打算如何调用window函数),您也可以将其写为Total。但是,当调用这样的函数时:

someObject.someInt

...函数中someObject.Total() 的值等于this

答案 2 :(得分:1)

不,因为变量未完全创建。通过使用'this'关键字,您可以从自身访问变量。

答案 3 :(得分:0)

在我看来,这只是为了清晰起见。当你不对实例变量和局部变量使用特殊的命名约定时,总是使用this.可能是一个很好的做法(在其他语言中也是如此,而不仅仅是javascript)。

即使在这种情况下可能不需要,但如果你有一个更大的函数,有很多本地变量和实例变量,那么当你区分时它会更加清晰。

答案 4 :(得分:0)

事实上,道格拉斯·克罗克福德在他的Javascript The Good Parts中建议不要在代码中使用这个关键字,因为来自对象的函数可能会应用于其他对象,这可能会导致错误。所以有时候只使用变量名更好。

答案 5 :(得分:0)

someInt被定义为someObject的属性。它需要被定义为变量才能以这种方式访问​​它。

http://jsfiddle.net/Z7mSK/

答案 6 :(得分:0)

详细了解this

中的{{1}}个关键字