为什么我们在这段代码中使用了“this”关键字?
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”关键字?
的this
关键字是指所代表的调用时以后的对象,即如果你这样调用该函数:
someObject.Total()
然后this
将参考someObject
函数内。感谢this
关键字,该功能可以修改someInt
并从someArray
中读取,它们是someObject
的成员。如果您从函数体中删除了this
,那么所有这些引用都将是全局变量或函数体局部的变量。
不,因为变量未完全创建。通过使用'this'关键字,您可以从自身访问变量。
在我看来,这只是为了清晰。如果您不使用特殊的命名约定来处理实例变量与局部变量(在其他语言中,而不仅仅是javascript),总是使用this.
。
即使它可能无法在这种情况下是必需的,如果你有一个更大的功能,有很多地方和实例变量,它使事情当你区分更清晰。
要回答另一个问题:不,我们不能“只输入变量的名称”,因为变量随后将不被定义为someObject'的'属性,但作为一个地方(如果使用'var')或全局变量。 –
没错,这是不是“只是为了清楚起见”。 –
是的,我说得太快了 - 在这种情况下'this'是必需的 - 我在C#/ Java中思考,像这样的东西会更偏好/可读性。 –
没有,声明someInt = 0
不会修改someInt
财产someObject
。相反,它会在global/default对象(浏览器中的window
)上修改名为someInt
的属性,这显然不是你想要的。
请注意(取决于您打算如何调用Total
函数),您也可以将其编写为someObject.someInt
。但是,调用这样的函数:
someObject.Total()
...的this
在该函数的值等于someObject
。
事实上,道格拉斯克罗克福德在他的Javascript The Good Parts
中,建议不要在代码中使用这个关键字,因为来自对象的函数可能会被应用到其他对象上,这可能会导致错误。所以有时候最好只使用变量名称。
只是使用变量名称并不好。道格拉斯克罗克福德说,把“这个”分配给“那个”,并用“那个”而不是“这个”。通过这种方式,当从另一个对象的上下文中调用方法时,“that”将引用原始上下文而不是调用方法。我希望这是有道理的 –
的someInt是前宣布,但肯定的,someInt很可能被用作/ VAR(也指出this.someInt在这个特殊的无影响段,这样它可以被enitirely删除) – 2011-11-02 20:09:49