为什么在对象内部的javascript函数中需要这样做?
我有一段Javascript代码:为什么在对象内部的javascript函数中需要这样做?,javascript,Javascript,我有一段Javascript代码: $scope.rectifyForm = { visible: false, rateErrorMessage: "", rectifyErrorMessage: "", isValid: function () { return this.rateErrorMessage.length === 0 && this.rectifyErrorMessage.length === 0; } }
$scope.rectifyForm =
{
visible: false,
rateErrorMessage: "",
rectifyErrorMessage: "",
isValid: function () {
return this.rateErrorMessage.length === 0 && this.rectifyErrorMessage.length === 0;
}
};
在isValid
方法中,我想检查两个变量的设置。这段代码之所以有效,是因为我使用了This
关键字。但是,如果我省略了这个
,我会得到一个错误,即这些变量未定义
有人能解释一下为什么会这样吗?为什么我需要使用
this
?rateErrorMessage
在被调用的函数范围内不是一个变量;它是一个对象的属性(因此您必须指定object.rateErrorMessage
)。由于该对象是调用函数的上下文,因此可通过访问该对象。此rateErrorMessage
不是被调用函数范围内的变量;它是一个对象的属性(因此您必须指定object.rateErrorMessage
)。由于该对象是调用函数的上下文,因此可以通过this
将函数作为对象的方法调用时,将其“this”设置为调用该方法的对象
isValid是在RectiveyForm范围内定义的一个函数,它还包括variable Rate ErrorMessage。但是函数定义与rateErrorMessage没有直接链接。因此,要访问函数中的变量,需要使用“this”,它实际上指向表单的范围。
如果不使用“this”,则该变量将在函数中未定义
您的代码也可以用以下方式编写-
函数是有效的(){
返回this.rateErrorMessage.length==0&&this.RectiveyErrorMessage.length==0;
}
然后呢,,
$scope.rectityform.isValid=isValid代码>
有关“this”关键字的详细信息,请参阅当函数作为对象的方法调用时,其“this”设置为调用该方法的对象
isValid是在RectiveyForm范围内定义的一个函数,它还包括variable Rate ErrorMessage。但是函数定义与rateErrorMessage没有直接链接。因此,要访问函数中的变量,需要使用“this”,它实际上指向表单的范围。
如果不使用“this”,则该变量将在函数中未定义
您的代码也可以用以下方式编写-
函数是有效的(){
返回this.rateErrorMessage.length==0&&this.RectiveyErrorMessage.length==0;
}
然后呢,,
$scope.rectityform.isValid=isValid代码>
有关“this”关键字的详细信息,可以参考,但是函数和两个属性都是同一个对象的一部分,所以为什么javascript不能识别这些属性呢,但是属性和变量是完全不同的。@Martijn这个特性并不是由语言提供的。但是函数和两个属性是同一个对象的一部分,所以为什么javascript不能识别这些属性呢,但是属性和变量是完全不同的。@Martijn该语言根本不提供此功能。