Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我们使用;这";此代码段中的关键字? var someObject={ someArray:新数组(), someInt:0, 总计:函数(){ this.someInt=0;//我们在这里使用了“this”关键字,为什么?我们不能只说“someInt=0”? 对于(var i=0;i_Javascript_Oop_Object_This_Code Snippets - Fatal编程技术网

Javascript 为什么我们使用;这";此代码段中的关键字? var someObject={ someArray:新数组(), someInt:0, 总计:函数(){ this.someInt=0;//我们在这里使用了“this”关键字,为什么?我们不能只说“someInt=0”? 对于(var i=0;i

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”关键字,您可以从变量本身访问变量。

在我看来,这只是为了清晰起见。始终使用
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”将引用原始上下文,而不是调用上下文。我希望这是有意义的