0

Отрывок из книги:

window.color = "red";
var о = {
    color: "Bluе"
};

function sayColor() {
    alert(this.color);
}
sayColor(); // " red"
o.sayColor = sayColor;
o.sayColor(); // " Bluе"

Функция sayColor( ) здесь определена глобально, но ссылается на объект this. Значение this не определяется вплоть до вызова функции, поэтому при выполнении кода оно может изменяться.

Когда функция sayColor( ) вызывается в глобаьной области видимости, она выводит строку "red", потому что this указывает на объект window, то есть значение this.color эквивалентно window.color.

Когда после назначения функции объекту о вызывается функция о.sayColor( ), объект this указывает на о и свойство this.color интерпретируется как о.color, в результате выводится строка "Bluе".

Kosta B.
  • 5,821
  • 3
  • 15
  • 24
ikar
  • 548
  • Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткой. Хотя похожие вопросы могут быть уместны на этом сайте, решение для этого вопроса вряд ли поможет будущим посетителям. Обычно можно избежать подобных вопросов написанием и исследованием минимальной программы для воспроизведения проблемы до публикации вопроса. – vp_arth Jun 20 '18 at 11:56

1 Answers1

2

переменная var 0 - у вас на русском, переименуйте на английский

heff
  • 1,455
  • уволенный девелопер передает привет :) – Mike Papou Jun 20 '18 at 12:06
  • не понял про что вы) – heff Jun 20 '18 at 12:10
  • видимо @ikar теперь ищет работу – vp_arth Jun 20 '18 at 12:17
  • @heff, есть байка про то, что обиженные девелоперы перед уходом оставляют такие штуки в коде – Mike Papou Jun 20 '18 at 12:20
  • Чтобы оставить такую штуку надо ещё и тестов к этому модулю забайпассить.. – vp_arth Jun 20 '18 at 12:22
  • Это если вообще есть тесты – Mike Papou Jun 20 '18 at 12:27
  • Не понял? Этот код и текст отрывок из книги.... – ikar Jun 20 '18 at 13:00
  • книгу кто то переводил, и не всегда этим занимаются программисты, переводчик как увидел так и написал – heff Jun 20 '18 at 13:08
  • спасибо за ответы. У меня вновь непонятки, почему в консоль записывается undefined если изменить код на вот так: console.log(sayColor()); – ikar Jun 20 '18 at 13:12
  • потому что функция sayColor ничего не возвращает, а вы написали - выведи мне то что вернет функция sayColor – heff Jun 20 '18 at 13:14
  • ох уж этот JS, с return - возвращает результат работы, без него, если есть просто вызов sayColor(); то, тоже будет результат. Когда же всё это правильно упакуется в голове..накипело) – ikar Jun 20 '18 at 13:20
  • по мне так все логично, если функция ничего не возвращает, то и нечего выводить. Если вам нужно код функции в консоль вывести пишите там - console.log(sayColor); – heff Jun 20 '18 at 13:26