2016-08-17 95 views
1

我正在使用的變量變爲未定義在某個點之後。有人能幫助我理解正在發生的事情嗎?無法訪問變量

下面的代碼是一個量角器代碼。

this.searchBy = element(by.model('searchCompanyComponent.searchByValue')); 

this.clickTheProvidedValueInSearchByDropdown = function (selectedItem) { 
    var x = this.searchBy; 
    this.searchBy.all(by.tagName('option')).filter(function (elem, index) { 
     return elem.getText().then(function (text) { 
      return text.toUpperCase().replace(/ |-/g, '') === selectedItem.toUpperCase().replace(/ |-/g, ''); 
     }); 
    }).getText().then(function (text) { 
     console.info(x); // 1 
     console.log(this.searchBy); // 2    
    }); 


}; 
console.log(this.searchBy); //3 

控制檯日誌在1和3示出了定位器的對象,但在圖2所示爲未定義控制檯日誌。

這種意外行爲背後的原因是什麼?

回答

4

在JavaScript中,this可能意味着很多不同的事情,具體取決於您引用它的上下文。

當您在說console.log(this.searchBy); // 2時,您處於您傳遞給getText的匿名函數的上下文中,該函數沒有searchBy屬性。你要麼需要bind這個功能到你的頁面對象的環境,或使用存儲的參考searchByx

它可能有助於檢查this mdn article