JavaScript — устоявшийся язык, но он только добавил поддержку классического объектно-ориентированного программирования (ООП) в ES6. Пока не были добавлены такие функции, как объявления классов, JavaScript обрабатывал ООП, используя менее известную парадигму, основанную на прототипах. Однако при любом подходе вы можете создавать сложные приложения, использующие объектно-ориентированные функции.
Конструктор в прототипе JavaScript очень похож на любую другую функцию. Основное отличие состоит в том, что вы можете использовать эту функцию-конструктор для создания объектов.
Что такое конструктор в JavaScript?
Конструкторы являются одним из основные понятия объектно-ориентированного программирования. Конструктор — это функция, которую вы можете использовать для создания экземпляра объекта. Помимо создания нового объекта, конструктор определяет свойства и поведение, которые будут ему принадлежать.
Синтаксис конструктора
функцияИмяКонструктора() {
это.свойство1 = "Свойство1";
это.свойство2 = "Свойство2";
это.свойство3 = "Свойство3";
}
Вы можете создать конструктор с функция ключевое слово, так как оно по существу как и любая другая функция. Однако конструкторы придерживаются следующих соглашений:
- Чтобы отличить их от других функций, используйте имя конструктора, начинающееся с заглавной буквы.
- Конструкторы используют этот ключевое слово по-разному. Внутри конструктора этот относится к новому объекту, который создаст конструктор.
- В отличие от функций JavaScript, конструкторы определяют свойства и поведение, а не возвращают значения.
Использование конструктора для создания новых объектов
В JavaScript использование конструктора для создания объекта — простая задача. Вот простой конструктор с последующим вызовом:
функцияСтудент() {
это.имя = "Глория";
это.гендер = "Женский";
этот.возраст = 19;
}
позволять женскийСтудент = новый Студент();
В этом примере студентка объект, созданный из Студент конструктор. Использовать новый ключевое слово для вызова функции в качестве конструктора. Это ключевое слово указывает JavaScript создать новый экземпляр Студент. Вы не должны вызывать эту функцию без новый ключевое слово, потому что этот внутри конструктора не будет указывать на новый объект. После строительства, студентка обладает всеми свойствами Студент. Вы можете получить доступ к этим свойствам и изменить их так же, как и для любого другого объекта.
Что важно знать о конструкторах JavaScript
Работа с конструкторами может быть очень утомительной и в то же время простой задачей. Вот некоторые важные вещи, которые должен знать каждый разработчик о работе с конструкторами.
Использование конструкторов с аргументами
Вы можете расширить конструктор для получения аргументов. Это очень важно, если вы хотите писать адаптивный и гибкий код.
Всякий раз, когда вы создаете объект из конструктора, этот объект наследует все свойства, объявленные в конструкторе. Например, студентка вы создали выше, будут иметь свойства имя, пол, и возраст с фиксированными начальными значениями. Хотя вы можете изменить каждое свойство вручную, было бы много работы, если бы вы писали программу, использующую множество объектов.
К счастью, конструкторы JavaScript могут принимать параметры, как и любые другие функции. Вы можете изменить Студент конструктор для приема двух параметров:
функцияСтудент(имя, пол) {
этот.имя = имя;
этот.gender = пол;
этот.возраст = 19;
}
Все объекты, созданные из вышеперечисленного, будут иметь возраст установлен в 19. Вы можете спроектировать свой конструктор таким образом, если есть свойство, которое вы хотите, чтобы все объекты имели.
Теперь вы можете определять уникальные объекты из одного и того же конструктора, передавая разные аргументы.
Аргументы делают конструкторы более гибкими. Они экономят время и поощряют чистый код.
Определение методов объекта
Метод — это свойство объекта, которое является функцией. Методы улучшают ваш код в ООП, поскольку они добавляют различное поведение к вашим объектам. Вот пример:
функцияСтудент(имя, пол) {
этот.имя = имя;
этот.gender = пол;
этот.возраст = 19 ;
этот.sayName = функция () {
возвращаться`Меня зовут $ {имя}`;
}
}
Вышеприведенное добавляет функцию сказатьИмя к конструктору.
Предположим, вы используете этот конструктор для создания объекта, который вы сохраняете в переменной, студентка. Затем вы можете вызвать эту функцию с помощью кода ниже:
студентка.sayName()
Прототип
Ранее мы создали Студент таким образом, что все его экземпляры будут иметь возраст недвижимость стоимостью 19. Это приведет к дублированию переменной для каждого Студент экземпляр, который вы создаете.
Чтобы избежать этого дублирования, JavaScript использует концепцию прототипов. Все объекты, созданные из конструктора, имеют общие свойства его прототипа. Вы можете добавить возраст собственность на Студент прототип, как показано ниже:
Студент.прототип.возраст = 19;
При этом все экземпляры Студент будет иметь возраст свойство. Объявление свойства прототипа это способ уменьшить дублирование кода в вашем приложении. Это делает ваш код максимально стандартным.
Свойство прототипа может быть объектом
Вы можете добавить свойства прототипа по отдельности, как описано выше. Но если вам нужно добавить много свойств, это может быть неудобно.
В качестве альтернативы вы можете содержать все необходимые свойства в новом объекте. Сделав это, вы установите все свойства сразу. Например:
Студент.прототип = {
возраст: 19,
раса: "Белый",
инвалидность: "Никто"
}
Не забудьте установить конструктор свойство при установке прототипов для нового объекта.
Студент.прототип = {
конструктор: Студент,
возраст: 19,
раса: "Белый",
инвалидность: "Никто"
}
Вы можете использовать это свойство, чтобы проверить, какая функция-конструктор создала экземпляр.
Супертипы и наследование
Наследование это метод, который программисты используют для уменьшения количества ошибок в своих приложениях. Это способ придерживаться Не повторяйся (СУХОЙ) принцип.
Предположим, у вас есть два конструктора:Студент и Учитель— которые имеют два сходных свойства прототипа.
Студент.прототип = {
конструктор: Студент,сказатьИмя: функция () {
возвращаться`Меня зовут $ {имя}`;
}
}Учитель.прототип = {
конструктор: Учитель,
сказатьИмя: функция () {
возвращаться`Меня зовут $ {имя}`;
}
}
Оба этих конструктора определяют сказатьИмя метод, тождественно. Чтобы избежать этого ненужного дублирования, вы можете создать супертип.
функцияИндивидуальныеДетали(){};
ИндивидуальныеДетали.прототип = {
конструктор: Индивидуальные детали,
сказатьИмя: функция () {
возвращаться`Меня зовут $ {имя}`;
}
};
Затем вы можете удалить сказатьИмя от обоих конструкторов.
Чтобы наследовать свойства от супертипа, используйте Объект.создать(). Вы устанавливаете прототип обоих конструкторов в экземпляр супертипа. В этом случае мы устанавливаем Студент и Учитель прототипы экземпляру IndividualDetails.
Вот:
Студент.прототип = Объект.create(IndividualDetails.prototype);
Учитель.прототип = Объект.create(IndividualDetails.prototype);
Делая это, Студент и Учитель наследуют все свойства супертипа, ИндивидуальныеДетали.
Вот как практиковать DRY в ООП с использованием супертипов.
Конструкторы меняют правила игры
Конструкторы являются ключевым компонентом JavaScript, и овладение их функциональностью имеет решающее значение для разработки приложений JavaScript ООП. Вы можете использовать конструктор для создания объектов, которые имеют общие свойства и методы. Вы также можете использовать наследование для определения иерархии объектов.
В ES6 вы можете использовать сорт ключевое слово для определения классических объектно-ориентированных классов. Эта версия JavaScript также поддерживает конструктор ключевое слово.