Власне, існує кілька способів створення об’єктів у JavaScript. Коли ви просто хочете створити об'єкт, немає переваги створювати об'єкти на основі конструктора за допомогою " нового " оператора. Це те саме, що створити об’єкт за допомогою синтаксису " об'єкт буквально ". Але " об'єкти на основі конструктора ", створені з " новим " оператором, користуються неймовірною користю, коли ви замислюєтесь про " прототипне успадкування ". Ви не можете підтримувати ланцюжок успадкування з об'єктами, створеними з буквальним синтаксисом. Але ви можете створити функцію конструктора , приєднати властивості та методи до його прототипу."Оператор, він поверне об'єкт, який матиме доступ до всіх методів та властивостей, приєднаних до прототипу функції цього конструктора.
Ось приклад створення об'єкта за допомогою функції конструктора (див. Пояснення коду внизу):
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.fullname = function() {
console.log(this.firstname + ' ' + this.lastname);
}
var zubaer = new Person('Zubaer', 'Ahammed');
var john = new Person('John', 'Doe');
zubaer.fullname();
john.fullname();
Тепер ви можете створити скільки завгодно об'єктів, інстанціюючи функцію побудови Person, і всі вони успадкують від неї повне ім’я ().
Примітка: ключове слово " це " позначатиметься порожнім об'єктом в рамках функції конструктора, і кожного разу, коли ви створюєте новий об'єкт від Person за допомогою оператора " new ", він автоматично повертає об'єкт, що містить усі властивості та методи, додані до ключового слова " this " . І ці об’єкти точно успадкують методи та властивості, приєднані до прототипу функції конструктора Person (що є основною перевагою такого підходу).
До речі, якщо ви хочете отримати однаковий функціонал із синтаксисом " об'єкт-буквальний ", вам доведеться створити fullname () для всіх об'єктів, як нижче:
var zubaer = {
firstname: 'Zubaer',
lastname: 'Ahammed',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
var john= {
firstname: 'John',
lastname: 'Doe',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
zubaer.fullname();
john.fullname();
Нарешті, якщо ви зараз запитаєте, чому я повинен використовувати підхід функції конструктора замість об'єктного буквального підходу:
*** Прототипне успадкування дозволяє простий ланцюг успадкування, який може бути надзвичайно корисним і потужним.
*** Це економить пам'ять, успадковуючи загальні методи та властивості, визначені в прототипі функцій конструктора. В іншому випадку вам доведеться копіювати їх знову і знову в усі об'єкти.
Сподіваюся, це має сенс.
a = new Object
,a = new Object()
,a = {}
, буквальне набагато простіше і деякі тести я провів деякий час назад сказати , що це швидше, більш нові компілятори можуть бути викликані моїм твердження помилковим. Те ж стосується і буквальних масивів