Javascript 为什么我们使用;这";此代码段中的关键字? var someObject={ someArray:新数组(), someInt:0, 总计:函数(){ this.someInt=0;//我们在这里使用了“this”关键字,为什么?我们不能只说“someInt=0”? 对于(var i=0;i
否,因为变量未完全创建。通过使用“this”关键字,您可以从变量本身访问变量。在我看来,这只是为了清晰起见。始终使用Javascript 为什么我们使用;这";此代码段中的关键字? var someObject={ someArray:新数组(), someInt:0, 总计:函数(){ this.someInt=0;//我们在这里使用了“this”关键字,为什么?我们不能只说“someInt=0”? 对于(var i=0;i,javascript,oop,object,this,code-snippets,Javascript,Oop,Object,This,Code Snippets,否,因为变量未完全创建。通过使用“this”关键字,您可以从变量本身访问变量。在我看来,这只是为了清晰起见。始终使用this。在不使用实例变量与局部变量的特殊命名约定时,可能是一种很好的做法(也可以使用其他语言,而不仅仅是javascript) 即使在这种情况下可能不需要它,但如果您有一个较大的函数,包含大量的局部变量和实例变量,那么在您进行区分时,它会使事情变得更清楚。this关键字指代稍后代表其进行调用的对象,即,如果您这样调用函数: var someObject = { someA
this。
在不使用实例变量与局部变量的特殊命名约定时,可能是一种很好的做法(也可以使用其他语言,而不仅仅是javascript)
即使在这种情况下可能不需要它,但如果您有一个较大的函数,包含大量的局部变量和实例变量,那么在您进行区分时,它会使事情变得更清楚。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
}
someObject.Total()
然后
this
将引用函数内部的someObject
。由于this
关键字,函数可以修改someInt
并从someArray
读取someObject
的成员。如果从函数体中删除this
,所有这些引用都将指向全局变量函数体的局部变量。否,语句someInt=0
不会修改someObject
的someInt
属性。相反,它会修改全局/默认对象(浏览器中的窗口
)上名为someInt
的属性,这显然不是您想要的
请注意(取决于您打算如何调用Total
函数),您也可以将其编写为someObject.someInt
。但是,在这样调用函数时:
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
}
someObject.Total()
…函数中的
this
的值等于someObject
事实上,Douglas Crockford在他的Javascript的好部分
中建议不要在代码中使用此关键字,因为对象中的函数可能应用于其他对象,这可能会导致错误。因此,有时最好只使用var可用名称。someInt
被定义为someObject
的属性。需要将其定义为变量才能以这种方式访问它
详细理解
这个
关键字someInt之前声明过,但是是的,someInt可能可以用作/var(同时指出this.someInt在这个特定的代码段中没有作用,因此可以删除它)来回答另一个问题:不,我们不能“只键入变量的名称”,因为该变量将不会被定义为someObject
的属性,而是作为局部变量(如果使用var
)或全局变量。对,这不是“为了清楚起见”是的,我说得太快了-本例中需要这个
-我在考虑C#/Java,在C#/Java中,这样的东西更像是一种偏好/可读性的东西。请随意否决我的答案-我现在感到内疚,因为我弄错了,并且得到了更高的票数。只使用变量名并不更好。道格拉斯·克罗克福德说要分配“this”改为“that”,用“that”代替“this”。这样,当从另一个对象的上下文调用该方法时,“that”将引用原始上下文,而不是调用上下文。我希望这是有意义的