1

我有这段 Javascript 代码:

$scope.rectifyForm =
{
    visible: false,
    rateErrorMessage: "",
    rectifyErrorMessage: "",
    isValid: function () {
        return this.rateErrorMessage.length === 0 && this.rectifyErrorMessage.length === 0;
    }
};

isValid我要检查的方法中设置了两个变量。这段代码有效,因为我使用了this关键字。但是,如果我省略this,我会收到这些变量未定义的错误。

有人可以解释这是为什么吗?为什么我需要使用this

4

2 回答 2

4

rateErrorMessage不是被调用函数范围内的变量;它是对象的属性(因此您必须指定theObject.rateErrorMessage)。由于该对象是调用函数的上下文,因此可以通过this.

于 2013-10-07T11:18:17.323 回答
0

当一个函数作为对象的方法被调用时,它的“this”被设置为调用该方法的对象。

isValid 是在 rectifyForm 范围内定义的函数,其中还包括变量 rateErrorMessage。但是函数定义没有直接链接到 rateErrorMessage。因此,要访问函数内部的变量,需要使用“this”,它实际上指向了 rectify form 的范围。如果您不使用“this”,则该变量将在函数中未定义。

您的代码也可以按以下方式编写- function isValid() { return this.rateErrorMessage.length === 0 && this.rectifyErrorMessage.length === 0; }

接着, $scope.rectifyForm.isValid = isValid;

有关“this”关键字的详细信息,您可以在 javascript 中参考 this

于 2013-10-07T11:29:18.050 回答