printprops({х:1});
var total = distance(0,0,2,1) + distanced, 1,3, 5);
var probability = factorial(5)/factorial(13);
При вызове функции вычисляются все выражения-аргументы (указанные между скобками), и полученные значения используются в качестве аргументов функции. Эти значения присваиваются параметрам, имена которых перечислены в определении функции. В теле функции выражения обращений к параметрам возвращают значения соответствующих аргументов.
При вызове обычной функции возвращаемое функцией значение становится значением выражения вызова. Если возврат из функции происходит по достижении ее конца интерпретатором, возвращается значение undefined
. Если возврат из функции происходит в результате выполнения инструкции return
, возвращается значение выражения, следующего за инструкцией return
, или undefined
, если инструкция return
не имеет выражения.
При вызове функции в ECMAScript 3 и в нестрогом режиме ECMAScript 5 контекстом вызова (значением this
) является глобальный объект. Однако в строгом режиме контекстом вызова является значение undefined
.
Функции, которые предназначались для использования в виде простых функций, обычно вообще не используют ключевое слово this
. Впрочем, его можно использовать, чтобы определить, не выполняется ли функция в строгом режиме:
// Определение и вызов функции, которая выясняет действующий режим работы,
var strict = (function() { return !this; }());
Составление цепочек вызовов методов
Когда методы возвращают объекты, появляется возможность использовать значение, возвращаемое одним методом, как часть последующих вызовов. Это позволяет создавать последовательности («цепочки», или «каскады») вызовов методов в одном выражении. При работе с библиотекой jQuery
(глава 19), например, часто можно встретить такие инструкции:
// Отыскать все заголовки, отобразить их в значения атрибутов id,
// преобразовать в массив и отсортировать
$( ":header").map(function() { return this.id )).get().sort();
Если вы пишете метод, не имеющий собственного возвращаемого значения, подумайте о возможности возвращать из него значение this. Если неуклонно следовать этому правилу при разработке своего API, появится возможность использовать стиль программирования, известный как составление цепочек из методов, [12] Термин был введен Мартином Фаулером (Martin Fowler). См. http://martinfowler.com/ dslwip/MethodChaining.html.
когда обращение к имени метода выполняется один раз, а затем может следовать множество вызовов его методов:
shape.setX(100).setY(100).setSize(50).setOutline("red").setFill("blue").draw();
He путайте цепочки вызовов методов с цепочками конструкторов, которые описываются в разделе 9.7.2.
Метод - это не что иное, как функция, которая хранится в виде свойства объекта. Если имеется функция f и объект о, то можно определить метод объекта о с именем m, как показано ниже:
о.m = f;
После этого можно вызвать метод m() объекта о:
о.m();
Или, если метод m() принимает два аргумента, его можно вызвать так:
о.m(х, у);
Строка выше является выражением вызова: она включает выражение обращения к функции о.m и два выражения-аргумента, х и у. Выражение обращения к функции в свою очередь является выражением обращения к свойству (раздел 4.4), а это означает, что функция вызывается как метод, а не как обычная функция.
Аргументы и возвращаемое значение при вызове метода обрабатываются точно так же, как при вызове обычной функции. Однако вызов метода имеет одно важное отличие: контекст вызова. Выражение обращения к свойству состоит из двух частей: объекта (в данном случае о) и имени свойства (m). В подобных выражениях вызова методов объект о становится контекстом вызова, и тело функции получает возможность ссылаться на этот объект с помощью ключевого слова this
. Например:
var calculator = { // Литерал объекта
ореrand1: 1,
operand2: 1,
add: function() {
// Обратите внимание, что для ссылки на этот объект используется
// ключевое слово this.
this.result = this.operandl + this.operand2:
}
};
calculator.add(); // Вызвать метод, чтобы вычислить 1+1.
Читать дальше
Конец ознакомительного отрывка
Купить книгу