为什么在对象内部的javascript函数中需要这样做?

为什么在对象内部的javascript函数中需要这样做?,javascript,Javascript,我有一段Javascript代码: $scope.rectifyForm = { visible: false, rateErrorMessage: "", rectifyErrorMessage: "", isValid: function () { return this.rateErrorMessage.length === 0 && this.rectifyErrorMessage.length === 0; } }

我有一段Javascript代码:

$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该语言根本不提供此功能。