我有这段Javascript代码:
$scope.rectifyForm =
{
visible: false,
rateErrorMessage: "",
rectifyErrorMessage: "",
isValid: function () {
return this.rateErrorMessage.length === 0 && this.rectifyErrorMessage.length === 0;
}
};
在isValid
方法中,我想检查两个变量是否已设置。这条代码有效,因为我使用了this
关键字。但是,如果我省略this
,我会收到一个错误,即这些变量未定义。
有人可以解释为什么会这样吗?为什么我需要使用this
?
答案 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