це! = це в JavaScript (ну, іноді ....)

Приклад 1

var Reptile = function() {
  var reptile = this;
   this.showBla = function() {
       alert(reptile.bla);
   }
}

var turtle = new Reptile();
turtle.bla = 'whatever';
turtle.showBla();

Приклад 2

var Reptile = function() {
   this.showBla = function() {
       alert(this.bla);
   }
}

var turtle = new Reptile();
turtle.bla = 'whatever';
turtle.showBla();

Is Приклад 1 legit? As it sometimes seems to screw things over to define "this" directly in the constructor...?!?

2
Виглядає просто чудово. Ви не визначаєте нічого в конструкторі, просто зберігаєте посилання. Не проблема взагалі.
додано Автор jAndy, джерело
Ви не можете самостійно визначити цей . Це завжди доступно, і його не можна перезаписати.
додано Автор pimvdb, джерело
Оскільки обидва приклади є незаконними, ви можете надати код, який іноді загвинчує речі?
додано Автор Esailija, джерело

2 Відповіді

Так, це законно і корисно у випадках, коли вам може знадобитися визначити функцію всередині функції, яка може бути викликана таким чином, що там "це" буде вказувати на щось інше. Книги рекомендують назвати цю змінну var that = this;

3
додано

Приклад 1 є загальним шаблоном для підтримки посилання на поточний екземпляр. У ситуації зворотного виклику, як:

setTimeout(turtle.showBla, 0);

Приклад 1 var reptile ... зберігає посилання this і покаже 'whatever' . У прикладі 2 буде показано undefined , якщо ви не призначите область в стороні виклику (наприклад, у jQuery):

setTimeout($.proxy(turtle.showBla, turtle), 0);
1
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram