Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

var о = { // Объект о.

m: function { // Метод m объекта.

var self = this; // Сохранить значение this в переменной,

console.log(this === о); // Выведет "true": this - это объект о.

f; // Вызвать вспомогательную ф-цию f.

function f { // Вложенная функция f

console.log(this === о); // "false": this - глоб. об. или undefined

console.log(self === o); // "true": self - знач, this внеш. ф-ции.

}

}

};

o.m; // Вызвать метод m объекта о.

В примере 8.5 (раздел 8.7.4) демонстрируется более практичный способ использования идиомы

var self=this
.

8.2.3. Вызов конструкторов

Если вызову функции или метода предшествует ключевое слово

new
, следовательно, это вызов конструктора. (Вызовы конструкторов обсуждались в разделах 4.6 и 6.1.2, а более подробно конструкторы будут рассматриваться в главе 9.) Вызов конструктора отличается от вызова обычной функции или метода особенностями обработки аргументов, контекстом вызова и возвращаемым значением.

Если вызов конструктора включает список аргументов в скобках, эти выражения-аргументы вычисляются и передаются конструктору точно так же, как любой другой функции или методу. Но если конструктор не имеет параметров, синтаксис вызова конструктора в языке JavaScript позволяет вообще опустить скобки и список аргументов. При вызове конструктора всегда можно опустить пару пустых скобок. Например, следующие две строки полностью эквивалентны:

var о = new Object;

var о = new Object;

Вызов конструктора создает новый пустой объект, наследующий свойство

prototype
конструктора. Назначение функции-конструктора - инициализировать объект, и этот вновь созданный объект передается конструктору как контекст вызова, благодаря чему функция-конструктор может ссылаться на него с помощью ключевого слова
this
. Обратите внимание, что вновь созданный объект передается как контекст вызова, даже если вызов конструктора выглядит как вызов метода. То есть в выражении
new о.m
контекстом вызова будет вновь созданный объект, а не объект о.

Как правило, в функциях-конструкторах не используется инструкция

return
. Обычно они выполняют инициализацию нового объекта и неявно возвращают его, по достижении своего конца. В этом случае значением выражения вызова конструктора становится новый объект. Однако если конструктор явно вернет объект с помощью инструкции
return
, то значением выражения вызова конструктора станет этот объект. Если конструктор выполнит инструкцию
return
без значения или вернет с ее помощью простое значение, это возвращаемое значение будет проигнорировано и в качестве результата вызова будет использован новый объект.

8.2.4. Косвенный вызов

Функции в языке JavaScript являются объектами и подобно другим объектам имеют свои методы. В их числе есть два метода,

call
и
аррlу,
выполняющие косвенный вызов функции. Оба метода позволяют явно определить значение
this
для вызываемой функции, что дает возможность вызывать любую функцию как метод любого объекта, даже если фактически она не является методом этого объекта. Кроме того, обоим методам можно передать аргументы вызова. Метод
саll
позволяет передавать аргументы для вызываемой функции в своем собственном списке аргументов, а метод
apply
принимает массив значений, которые будут использованы как аргументы. Подробнее о методах
call
и
аррlу
рассказывается в разделе 8.7.3.

8.3. Аргументы и параметры функций

В языке JavaScript, в определениях функций не указываются типы параметров, а при вызове функций не выполняется никаких проверок типов передаваемых значений аргументов. Фактически при вызове функций в языке JavaScript не проверяется даже количество аргументов. В подразделах ниже описывается, что происходит, если число аргументов в вызове функции меньше или больше числа объявленных параметров. В них также демонстрируется, как можно явно проверить типы аргументов функции, если необходимо гарантировать, что функция не будет вызвана с некорректными аргументами.

8.3.1. Необязательные аргументы

Когда число аргументов в вызове функции меньше числа объявленных параметров, недостающие аргументы получают значение

undefined
. Часто бывает удобным писать функции так, чтобы некоторые аргументы были необязательными и могли опускаться при вызове функции. В этом случае желательно предусмотреть возможность присваивания достаточно разумных значений по умолчанию параметрам, которые могут быть опущены. Например:

// Добавить в массив а перечислимые имена свойств объекта о и вернуть его.

// Если аргумент а не не был передан, создать и вернуть новый массив,

function getPropertyNames(o, /* необязательный */ а) {

if (а === undefined) а = []; // Если массив не определен, создать новый

for(var property in о) a.push(property);

return а;

}

// Эта функция может вызываться с 1 или 2 аргументами:

var а = getPropertyNames(o); // Получить свойства объекта о в новом массиве

getPropertyNames(p,а); // добавить свойства объекта р в этот массив

Вместо инструкции if в первой строке этой функции можно использовать оператор || следующим образом:

Поделиться:
Популярные книги

Точка Бифуркации

Смит Дейлор
1. ТБ
Фантастика:
боевая фантастика
7.33
рейтинг книги
Точка Бифуркации

Телохранитель Генсека. Том 4

Алмазный Петр
4. Медведев
Фантастика:
попаданцы
альтернативная история
6.00
рейтинг книги
Телохранитель Генсека. Том 4

Имя нам Легион. Том 13

Дорничев Дмитрий
13. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 13

Бастард Императора

Орлов Андрей Юрьевич
1. Бастард Императора
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Бастард Императора

Гнездо Седого Ворона

Свержин Владимир Игоревич
2. Трактир "Разбитые надежды"
Фантастика:
боевая фантастика
7.50
рейтинг книги
Гнездо Седого Ворона

Путь

Yagger Егор
Фантастика:
космическая фантастика
4.25
рейтинг книги
Путь

Командор космического флота

Борчанинов Геннадий
3. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Командор космического флота

Законник Российской Империи. Том 4

Ткачев Андрей Юрьевич
4. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
дорама
5.00
рейтинг книги
Законник Российской Империи. Том 4

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Наша навсегда

Зайцева Мария
2. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Наша навсегда

Император Пограничья 7

Астахов Евгений Евгеньевич
7. Император Пограничья
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Император Пограничья 7

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13

Мастер 10

Чащин Валерий
10. Мастер
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 10