为什么在对象里面的javascript函数需要这个?

时间:2013-10-07 11:17:06

标签: javascript

我有这段Javascript代码:

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

isValid是在rectifyForm范围内定义的函数,它还包含变量rateErrorMessage。但是函数定义没有与rateErrorMessage的直接链接。因此,要访问函数内部的变量,需要使用“this”,它实际上指向了整理形式的范围。 如果你不使用'this'那么变量将在函数中未定义。

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

然后, $scope.rectifyForm.isValid = isValid;

有关“this”关键字的详细信息,请参阅this in javascript