Объекты ─ это способ категоризации поведения и данных, облегчающий разработку и обдумывание больших объёмов кода.
Объектно-ориентированное программирование можно найти на многих языках, используемых для создания всех видов программного обеспечения, и считается очень хорошим способом написания кода.
Мы уже рассматривали объекты в JavaScript ─ они представляют собой коллекции именованных свойств и методов, и их можно создавать «на лету», используя синтаксис object literal:
var user = { name: "tom", say: function (words) { alert(words); } };
Одна из причин, по которой полезно использовать объекты для хранения данных, заключается в том, что, как уже упоминалось, человеческий мозг очень хорошо классифицирует вещи: лодка; стул; лось. Создание объектов в коде помогает вам задуматься о том, как различные части вашего кода сочетаются и (надеюсь) работают вместе.
В большом приложении у вас может быть большое количество объектов, взаимодействующих друг с другом. Помните, что объекты — это совокупность свойств (например, name) и методов (например, say)? Такая группировка данных и поведения в одну сущность называется инкапсуляцией.
Мощный инструмент, доступный вам при создании приложений с использованием объектов, называется наследованием. Это когда объект наследует свойства и методы от другого объекта. Объект может изменять свойства и методы, которые он наследует, а также добавлять дополнительные свойства и методы.
Так, например, вы могли бы создать объект moose, который наследует поведение от объекта mammal. Например, лось мог бы изменить пушистость млекопитающего. Затем вы могли бы создать объект pangolin, который также наследуется от млекопитающего. Но, конечно, ящеры не пушистые, и у них может быть другое свойство чешуйчатости.
Как объекты наследуются?
JavaScript использует прототипное наследование. Это означает, что, когда объект наследуется от другого, родительский объект известен как дочерний прототип.
Есть ещё пара вещей, которые следует знать: каждый объект поддерживает ссылку на свой прототип, и каждый объект наследуется от глобального объекта object.
Когда вы запрашиваете свойство объекта, JavaScript выполняет поиск свойства этого объекта. Если он не находит его там, он переходит по ссылке на прототип объекта и ищет свойство там. Он продолжает это, поднимаясь по цепочке прототипов, пока не найдёт его, или возвращает undefined.
Другими словами, объект наследует свойства и методы, поддерживая ссылку на другой объект, от которого он хочет унаследовать. Несколько объектов могут наследоваться от одного единственного объекта, но один единственный объект не может наследоваться от нескольких других объектов, хотя он может наследоваться от объекта, который наследуется от другого.
На практике
Существует много способов добиться наследования в JavaScript. Наиболее часто используемым является шаблон конструктора. В этом шаблоне функция, называемая конструктором, используется для создания новых объектов. Конструкторы используются в сочетании с ключевым словом new для создания объектов.
Вот пример конструктора. Обратите внимание на заглавную букву в слове «Человек» — это важное соглашение. Как правило, в JavaScript, если у него есть заглавная первая буква, это конструктор, и его следует использовать с ключевым словом new.
var Person = function (name) { this.name = name; };
Теперь вы можете использовать новое ключевое слово для создания объектов Person:
var tom = new Person('tom');
Это создаёт объект, подобный этому:
{ name: "Tom" }
В шаблоне конструктора вы вручную создаёте объект, от которого будут наследоваться новые объекты, добавляя свойства и методы к свойству прототипа функции-конструктора. Подобный этому:
Person.prototype.say = function (words) { alert(this.name + ' says "' + words + '"'); };
Теперь объекты, созданные из конструктора, будут иметь метод say.
var tom = new Person("tom"); tom.say("Hello"); // Produces an alert: tom says "Hello"
Это только начало
Наследование и объектно-ориентированное программирование — это большие и сложные области, о которых написаны целые книги. Если вы хотите узнать больше, есть несколько отличных ресурсов.
Если вы хотите узнать больше о новом ключевом слове, ознакомьтесь с темой Stack Overflow. Для получения чуть более подробной статьи о конструкторах ознакомьтесь с конструкторами, которые считаются слегка запутанными.
Страницы в тему:
- Следующая страница: Создание элементов
- Предыдущая страница: Внушительный урок JavaScript