JavaScript. Подробное руководство, 6-е издание
Шрифт:
Если вы пишете метод, не имеющий собственного возвращаемого значения, подумайте о возможности возвращать из него значение this. Если неуклонно следовать этому правилу при разработке своего API, появится возможность использовать стиль программирования, известный
12
Термин был введен Мартином Фаулером (Martin Fowler). См.dslwip/MethodChaining.html.
когда обращение к имени метода выполняется один раз, а затем может следовать множество вызовов его методов:
He путайте цепочки вызовов методов с цепочками конструкторов, которые описываются в разделе 9.7.2.
8.2.2. Вызов методов
Метод - это не что иное, как функция, которая хранится в виде свойства объекта. Если имеется функция f и объект о, то можно определить метод объекта о с именем m, как показано ниже:
После этого можно вызвать метод m объекта о:
Или, если метод m принимает два аргумента, его можно вызвать так:
Строка выше является выражением вызова: она включает выражение обращения к функции о.m и два выражения-аргумента, х и у. Выражение обращения к функции в свою очередь является выражением обращения к свойству (раздел 4.4), а это означает, что функция вызывается как метод, а не как обычная функция.
Аргументы и возвращаемое значение при вызове метода обрабатываются точно так же, как при вызове обычной функции. Однако вызов метода имеет одно важное отличие: контекст вызова. Выражение обращения к свойству состоит из двух частей: объекта (в данном случае о) и имени свойства (m). В подобных выражениях вызова методов объект о становится контекстом вызова, и тело функции получает возможность ссылаться на этот объект с помощью ключевого слова
Чаще всего при вызове методов используется форма обращения к свойствам с помощью оператора точки, однако точно так же можно использовать форму обращения к свойствам с помощью квадратных скобок. Например, оба следующих выражения являются выражениями вызова методов:
Выражения вызова методов могут включать более сложные выражения обращения к свойствам:
Методы и ключевое слово
rect.setSize(width, height);
setRectSize(rect, width, height);
Гипотетически функции, вызывающиеся в этих двух строках, могут производить абсолютно идентичные действия над объектом rect (гипотетическим), но синтаксис вызова метода в первой строке более наглядно демонстрирует, что в центре внимания находится объект rect.
Обратите внимание:
В отличие от переменных, ключевое слово