На самом деле, есть несколько способов создания объектов в JavaScript.Когда вы просто хотите создать объект, нет смысла создавать объекты " на основе конструктора ", используя оператор " new ".Это то же самое, что создание объекта с использованием синтаксиса " object literal ".Но объекты на основе конструктора , созданные с помощью оператора " new ", находят невероятное применение, когда вы думаете о " наследовании прототипа ".Вы не можете поддерживать цепочку наследования с объектами, созданными с буквальным синтаксисом.Но вы можете создать функцию конструктора , прикрепить свойства и методы к ее прототипу.Затем, если вы назначите эту функцию конструктора любой переменной с помощью оператора « new », он вернет объект, который будет иметь доступ ко всем методам и свойствам, связанным с прототипом этой функции конструктора.
Вот пример создания объекта с использованием функции конструктора (см. Объяснение кода внизу):
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.функция и все они будут наследовать fullname () от нее.
Примечание. Ключевое слово " this " будет ссылаться на пустой объект внутри функции конструктора, и всякий раз, когда вы создаете новый объект из Person с помощью оператора " new ", оно будетавтоматически возвращать объект, содержащий все свойства и методы, связанные с ключевым словом " this ".И этот объект наверняка унаследует методы и свойства, связанные с прототипом функции конструктора Person (что является основным преимуществом этого подхода).
Кстати, если вы хотеличтобы получить ту же функциональность с синтаксисом " object literal ", вам необходимо создать 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();
Наконец, если вы сейчас спроситепочему я должен использовать функцию конструктора подход вместо объектный литерал подход:
*** Прототипное наследование позволяет простую цепочку наследования, которая может быть чрезвычайно полезной и мощной.
*** Экономит память, наследуя общие методы и свойства, определенные в прототипе функций конструктора.В противном случае вам придется копировать их снова и снова во всех объектах.
Надеюсь, это имеет смысл.