2016-08-17 4 views
1

Переменная, которую я использую, становится undefined после определенного момента. Может кто-то помочь мне в понимании того, что происходит.Невозможно получить доступ к переменной

Код, указанный ниже, является транспортным кодом.

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 эту функцию в контексте вашей страницы объекта или использовать сохраненную ссылку на searchBy в x

Это может быть полезно рассмотреть this mdn article

Смежные вопросы