Введение в конструктор в JavaScript
Метод конструктора в JavaScript - это специальный метод, используемый для создания и инициализации объектов в классе. Это то, что делает конструктор на каждом языке программирования. То, что отличает конструктор JavaScript от других, это свобода с точки зрения синтаксиса. Чтобы лучше это понять, просто откройте инструменты разработчика браузера (Ctrl / Cmd + Shift + C) и перейдите на вкладку Консоль в окне инструментов разработчика.
Похоже, это в Chrome
Это площадка для большинства концепций, связанных с JavaScript. Мы будем использовать эту площадку на протяжении всей этой статьи.
Типы Конструкторов в JavaScript
В JavaScript есть два типа конструкторов
1. Встроенные конструкторы
Это легкодоступные конструкторы, которые поставляются в комплекте со средой исполнения. Пользователь просто должен вызвать их и альт, работа сделана. Примерами встроенных конструкторов являются Array, Date и Object.
2. Пользовательские Конструкторы
Это конструкторы, объявленные и определенные программистом для использования в приложении. Программист также может определять свойства и методы своих собственных пользовательских типов. Они также известны как пользовательские конструкторы. По соглашению все конструкторы JavaScript заключаются в предложения. Это говорит человеку, использующему их, что эта функция должна вызываться с использованием нового ключевого слова.
Как работают конструкторы в JavaScript?
Прежде чем мы рассмотрим синтаксис конструкторов JavaScript, нам нужно понять очень базовую концепцию JavaScript -
- Класс Object резюмирует в контексте этой статьи, каждый объект JavaScript создается конструктором Object. Если значение, предоставленное при создании объекта, является нулевым или неопределенным, конструктор объекта создаст пустой объект. В противном случае он создаст объект типа, определенного при создании объекта.
- Всякий раз, когда объявляется новый объект типа класса, ключевое слово new возвращает ссылку на вновь созданный объект. Доступ к этому объекту осуществляется с помощью этого ключевого слова внутри конструктора для инициализации свойств объекта.
- Хотя технически JavaScript не имеет классов, но имеет конструкторы и прототипы для обеспечения аналогичной функциональности. В ECMAScript 2015 концепция классов была введена в JavaScript. Это было просто синтаксическим дополнением к существующему наследованию на основе прототипов и не добавляло никакой новой функциональности в язык.
Синтаксис и примеры конструктора в Javascript
1) Метод конструктора
Ниже приведен метод конструктора. Этот метод используется внутри прототипа класса.
Синтаксис
constructor((arguments))( … )
Код
class Employee(
constructor(id, name)(
this.id = id;
this.name = name;
))
var emp1 = new Employee(123, "John");
console.log(emp1.name);
Выход:
2) Конструктор объектов (встроенные конструкторы)
Конструктор Object вызывается непосредственно при создании объекта класса Object. Это создает объект класса Object, если в качестве аргументов передаются нулевые или неопределенные параметры. В противном случае создается объект типа заданных параметров.
Синтаксис
new Object(( value ))
Или
new Array(( value ))
Или
new Date(( value ))
Или
new String(( value ))
Или
new Number(( value ))
Или
new Boolean(( value ))
Или
new Function(( value ))
Или
new Error(( value ))
Или
new RegExp(( value ))
и так далее…
Код:
var name = new Object("John");
var age = new Object(28);
console.log("Name : "+name+" & Age : "+age);
Выход:
3) Массив и Дата конструкторы
Аналогичным образом конструкторы Array и Date также можно использовать для создания объектов соответствующих типов.
Код:
var alphabets = new Array('Apple', 'Ball', 'Cat');
console.log(alphabets);
Выход:
Код:
var now = new Date();
console.log(now);
Выход:
Код:
var err = new Error("A user-defined error has occurred.");
console.log(err);
Выход:
4) Пользовательские Конструкторы
Мы также можем объявить и определить наши собственные конструкторы, которые будут использоваться в нашем приложении. Давайте посмотрим, как этого можно достичь.
Синтаксис
function FunctionName((arguments))( … )
Код
function Book(name, author, year) (
this.name = name;
this.author = author;
this.year = year;
)
function displayBook(book)(
console.log('\'' + book.name + '\' authored by ' + book.author + ' in the year ' + book.year + '.');
)
var book1 = new Book('Java - The Complete Reference', 'Herbert Schildt', 2006);
var book2 = new Book('Let Us C', 'Yashavant Kanetkar', 2002);
var book3 = new Book('Data Structures', 'Seymour Lipschutz', 2005);
displayBook(book1);
displayBook(book2);
displayBook(book3);
Выход:
Важность нового ключевого слова
Теперь вам может быть интересно, что если я не буду использовать новое ключевое слово? Могу ли я опустить новое ключевое слово? Ну, друг мой, нет. Использование нового ключевого слова очень важно.
- Конструкторы JavaScript являются обычными функциями. Они сопровождаются новым ключевым словом, которое сообщает движку JavaScript, что новый объект должен быть создан с заданными свойствами. Без нового ключевого слова вы бы просто создавали все больше и больше глобальных объектов.
- Новое ключевое слово возвращает ссылку на вновь созданный объект. Затем мы сохраняем эту ссылку в переменной. Без ключевого слова new объект создается, но ссылка на объект не возвращается. Объект принимает глобальную область видимости. Единственная ссылка на этот объект - через объект окна.
- Смущенный? Давайте лучше разберемся с примерами. Рассмотрим приведенный выше пример еще раз. Мы удалили новое ключевое слово из объявлений объекта. Результатом стало исключение из неопределенных переменных. Это связано с тем, что без нового ключевого слова ссылка на вновь созданные объекты не возвращалась и, следовательно, не сохранялась в наших переменных book1, book2 и book3. Когда мы попытались получить доступ к этим переменным в методе отображения книги, возникло исключение.
Код:
function Book(name, author, year) (
this.name = name;
this.author = author;
this.year = year;
)
function displayBook(book)(
console.log('\'' + book.name + '\' authored by ' + book.author + ' in the year ' + book.year + '.');
)
var book1 = Book('Java - The Complete Reference', 'Herbert Schildt', 2006);
var book2 = Book('Let Us C', 'Yashavant Kanetkar', 2002);
var book3 = Book('Data Structures', 'Seymour Lipschutz', 2005);
displayBook(book1);
displayBook(book2);
displayBook(book3);
Выход:
В том же примере, если мы изменим метод отображения книги для доступа к объектам через область окна, мы получим непредвиденный результат.
Код:
function Book(name, author, year) (
this.name = name;
this.author = author;
this.year = year;
)
function displayBook(book)(
console.log('\'' + window.name + '\' authored by ' + window.author +' in the year ' + window.year + '.');
)
var book1 = Book('Java - The Complete Reference', 'Herbert Schildt', 2006);
var book2 = Book('Let Us C', 'Yashavant Kanetkar', 2002);
var book3 = Book('Data Structures', 'Seymour Lipschutz', 2005);
displayBook(book1);
displayBook(book2);
displayBook(book3);
Выход:
Теперь, в качестве упражнения, проведите небольшой мозговой штурм, чтобы выяснить, почему мы получаем этот результат!
Scope-Safe Constructors
Встроенные в JavaScript конструкторы являются безопасными для области видимости. Они не создают глобальные переменные области при вызове без нового ключевого слова. Таким образом, эти объекты могут быть безопасно созданы с новым ключевым словом или без него.
Код
function SampleFn(argument) (
// if "this" is not an instance of the constructor
// it means it was called without new
if (!(this instanceof SampleFn)) (
// call the constructor again with new
return new SampleFn(argument);
)
// The code to construct properties and methods
)
Да, вы тоже можете создавать определяемые пользователем конструкторы, безопасные для области видимости. Продолжайте, создайте безопасный для контекста конструктор для наших книг в приведенном выше примере.
Вывод
В этой статье подробно рассказывается о конструкторах JavaScript. Это также помогает в понимании работы JavaScript. Здесь следует помнить, что хотя технически в JavaScript нет классов, методы и прототипы предоставляют схожую функциональность в распоряжение разработчика. И да, новое ключевое слово важно.
Рекомендуемые статьи
Это было руководство для конструктора в JavaScript. Здесь мы обсуждаем его типы и важные методы с помощью Как создать безопасный для контекста конструктор. Вы также можете просмотреть наши статьи, чтобы узнать больше:
- Что может сделать Javascript?
- Что такое JavaScript?
- Как установить JavaScript
- Деструктор на Яве
- Функции регулярных выражений в Python (пример)
- Примеры этого ключевого слова
- Работа и правила instanceOf в Java с примером