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