2013-10-07 48 views
1

我有這一塊的Javascript代碼:爲什麼在一個對象內部需要javascript函數?

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

isValid方法我想看看這兩個變量的設置。這段代碼有效,因爲我使用了this關鍵字。但是,如果我省略this,則會出現這些變量未定義的錯誤。

有人可以解釋爲什麼這是?爲什麼我需要使用this

回答

4

rateErrorMessage不是被調用函數範圍內的變量;它是一個對象的屬性(所以你必須指定theObject.rateErrorMessage)。由於該對象是調用函數的上下文,因此可通過this獲取。

+0

但函數和兩個屬性都是同一個對象的一部分,爲什麼JavaScript不能識別這些屬性? – Martijn

+0

它的確如此,但屬性和變量是非常不同的東西。 – Quentin

+0

@Martijn該功能根本不是由該語言提供的。 – leaf

0

當一個函數被調用作爲一個對象的方法時,它的'this'被設置爲該方法被調用的對象。

isValid是一個在rectifyForm範圍內定義的函數,它也包含變量rateErrorMessage。但函數定義沒有直接鏈接到rateErrorMessage。因此,要訪問函數內部的變量,需要使用'this',它實際上指向整形表單的範圍。 如果你不使用'this',那麼函數中的變量將是未定義的。

你的代碼可以通過以下方式書寫良好 function isValid() { return this.rateErrorMessage.length === 0 && this.rectifyErrorMessage.length === 0; }

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

有關「這個」關鍵字的詳細信息,可以參考this in javascript

相關問題