2011-11-02 119 views
0
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”关键字?不能我们只输入变量的名称?为什么我们在这段代码中使用了“this”关键字?

+0

的someInt是前宣布,但肯定的,someInt很可能被用作/ VAR(也指出this.someInt在这个特殊的无影响段,这样它可以被enitirely删除) – 2011-11-02 20:09:49

回答

5

this关键字是指所代表的调用时以后的对象,即如果你这样调用该函数:

someObject.Total() 

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

1

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

0

在我看来,这只是为了清晰。如果您不使用特殊的命名约定来处理实例变量与局部变量(在其他语言中,而不仅仅是javascript),总是使用this.

即使它可能无法在这种情况下是必需的,如果你有一个更大的功能,有很多地方和实例变量,它使事情当你区分更清晰。

+4

要回答另一个问题:不,我们不能“只输入变量的名称”,因为变量随后将不被定义为someObject'的'属性,但作为一个地方(如果使用'var')或全局变量。 –

+3

没错,这是不是“只是为了清楚起见”。 –

+0

是的,我说得太快了 - 在这种情况下'this'是必需的 - 我在C#/ Java中思考,像这样的东西会更偏好/可读性。 –

3

没有,声明someInt = 0不会修改someInt财产someObject。相反,它会在global/default对象(浏览器中的window)上修改名为someInt的属性,这显然不是你想要的。

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

someObject.Total() 

...的this在该函数的值等于someObject

0

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

+1

只是使用变量名称并不好。道格拉斯克罗克福德说,把“这个”分配给“那个”,并用“那个”而不是“这个”。通过这种方式,当从另一个对象的上下文中调用方法时,“that”将引用原始上下文而不是调用方法。我希望这是有道理的 –

相关问题