Page 136 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 136

функцию в существующий объект. Мы можем также добавить метод в объект непо­
       средственно.
       const  о  =
           name :  ' W allace ' ,              / /  свойство  базового  типа
           bark :  function ( )    {  return  ' W oof ! ' ;    } ,   / /  свойство  функция  (метод)

          В спецификацию ЕSб введен новый сокращенный синтаксис для методов. Следу­
       ющее функционально эквивалентно предыдущему примеру.
       const  о  =  {
           name :  ' W allace ' ,     / /  свойство  базового  типа
           bark ( )    {  return  ' W oof !  ' ;   } ,   / /  свойство  функции  (метод)




       Ключевое слово         thi s

          В теле функции доступна предназначенная только для чтения специальная пере­
       менная  this. Это  ключевое  слово  обычно ассоциируется  с  объектно-ориентиро­
       ванным программированием, и  мы узнаем больше о его использовании в  главе 9.
       В JavaScript, однако, оно используется несколькими способами.
          Обычно ключевое слово this имеет отношение к функциям, являющимся свой­
       ствами объектов. При вызове метода переменной this присваивается значение кон­
       кретного объекта, в котором произошел вызов.

       const  о  =  {
           name :  ' W allace ' ,
                                                e
           speak ( )    {  return  ' М еня  зовут  $ { t his . nam } ! ' ;    }  ,
                                о
          Когда происходит вызов  .   speak  ) , переменная this будет связана с объектом о.
                                        (
              (
       о  .   speak  ) ;   / /  "Меня  зовут  Wallace ! "
          Важно понимать, что this связывается согласно тому, как функция вызвана, а не
       где объявлена. Таким образом, this связана с о не потому, что speak - это свойство
       о,  а потому,  что мы вызвали этот метод непосредственно из о (о . speak). Давайте
                                                                           с
       рассмотрим, что будет, если мы присвоим ту же функцию переменной.
                          k
       const  speak  =  o . spea ;
       speak  ===  o . speak;   / /   true;  обе  переменные  обращаются  к  той  же  функции
       speak  )   ;         / /  "Меня  зовут  ! "
            (
          В связи с другим способом вызова функции движок JavaScript не знает, что функ­
       ция была первоначально объявлена в о; таким образом, переменной this было при­
       своено значение undefined.



       1 3 6   Глава 6. Функции
   131   132   133   134   135   136   137   138   139   140   141