До этого мы говорили об объекте лишь как о хранилище значений. Теперь пойдем дальше и поговорим о добавлении в объекты собственных функций (методов), а также о конструкторах — функциях, создающих объекты.
Свои методы объектов
При объявлении в объект можно записать функцию. Она становится его методом, например:
Можно создать метод и позже, явным присвоением:
Доступ к объекту через this
Для полноценной работы метод должен иметь доступ к данным объекта. В частности, вызовuser.sayHi()
может захотеть вывести имя пользователя.
Для доступа к объекту из метода используется ключевое слово this
. Значением this
является объект, в контексте которого вызван метод, например:
Здесь при выполнении функции user.sayHi()
в this
будет храниться ссылка на текущий объект user
.
В данном случае вместо this
можно было бы использовать и переменную: alert( user.name )
, но объект user
может быть куда-то передан, переменная user
перезаписана и т.п. Использование this
гарантирует, что функция работает именно с тем объектом, в контексте которого вызвана.
Через this
можно обратиться к любому свойству объекта, а при желании и передать его куда-то:
Важность: 5
tutorial/intro/object/calculator.html
[Открыть задачу в новом окне]
Важность: 2
Решение состоит в том, чтобы каждый раз возвращать текущий объект. Это делается добавлением return this
в конце каждого метода:
[Открыть задачу в новом окне]
Функция-конструктор, «new»
Обычный синтаксис {...}
позволяет создать один объект. Но зачастую нужно создать много однотипных объектов.
Для этого используют функции, запуская их при помощи специального оператора new
.
Конструктором становится любая функция, вызванная через new
.
Например:
1 |
function Animal(name) { |
6 |
var animal = new Animal( "ежик" ); |
Любую функцию можно вызвать при помощи new
. При этом она работает несколько иным образом, чем обычно:
- Автоматически создается новый, пустой объект.
- Специальное ключевое слово
this
получает ссылку на этот объект.
- Функция выполняется. Как правило, она модифицирует
this
, добавляет методы, свойства.
- Возвращается
this
.
Так что результат выполнения примера выше — это объект:
О создаваемом объекте говорят, что это «объект класса(или типа) Animal
».
Термин «класс» здесь является профессиональным жаргоном. Во многих других языках программирования есть специальная сущность «класс». В JavaScript ее нет, но кое-что похожее организовать можно, поэтому так и называют.
Если функция явно возвращает объект, то будет возвращен он, а не this
.
Например:
Если функция возвращает не объект, к примеру, число, то такой вызов return
ни на что не повлияет. Например:
Эта особенность работы new
прописана в стандарте, знать о ней полезно, но используется она весьма редко.
Названия функций, которые предназначены создавать объекты, как правило, начинают с большой буквы.
Кстати, при вызове new
без аргументов скобки можно не ставить:
var animal = new BigAnimal; |
var animal = new BigAnimal(); |
Важность: 2
Да, возможны.
Они должны возвращать одинаковый объект. При этом если функция возвращает объект, то this
не используется.
Например, они могут вернуть один и тот же объект obj
, определенный снаружи:
Комментарии
Оставить комментарий
Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)
Термины: Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)