Чтобы избежать путаницы, давайте использовать разные имена:
// An object we might use as a prototype
var person = {
name: "",
gender: "",
age: 0
};
// A constructor function, note the capital P
var Person = function(name, gender, age)
{
this.name = name;
this.gender = gender;
this.age = age;
};
Когда объявили, как это сделать, они оба принимают е качественный объем памяти, хотя они еще не «созданы»? (или эта концепция не применима к JavaScript)
№ person
(нижний регистр) - это простой объект с тремя свойствами. Person
(с заглавной буквы) является функциональным объектом, который имеет связанный (пустой) объект-прототип (Person.prototype
). Теоретически функция будет занимать больше памяти, чем объект, потому что у нас есть объект функции, связанный с ней код и простой объект (его прототип).
Не может быть вопрос, хотя. Объекты функций сами по себе не занимают много памяти, этот код мал, а пустые объекты (прототип) занимают очень мало. Предположительно, у вас не будет миллионов и миллионов, поскольку (если я правильно понимаю суть вашего вопроса), они должны быть основой других объектов.
Может оба эти корректно обновленного следующим образом:
var john = new person();
Не буквально, нет. Но вы можете создавать экземпляры на основе каждого из них. Чтобы создать новый экземпляр, поддерживаемый person
, вы должны использовать Object.create
; чтобы создать новый экземпляр с помощью Person
и при поддержке Person.prototype
, вы бы использовать new
:
// Using the `person`
var john = Object.create(person);
john.name = "John";
john.gender = "M";
john.age = 47;
// Using `Person` (the constructor function)
var mary = new Person("Mary", "F", 32);
Это действительно только становится интересно, когда по крайней мере один из свойств прототипа не установлено строительства.Это свойство может быть что угодно, но давайте рассмотрим общий случай: Функция:
// An object we might use as a prototype
var person = {
name: "",
gender: "",
age: 0,
sayName: function() {
console.log("My name is " + this.name);
}
};
// A constructor function, note the capital P
var Person = function(name, gender, age)
{
this.name = name;
this.gender = gender;
this.age = age;
};
Person.prototype.sayName = function() {
console.log("My name is " + this.name);
};
Тогда:
// Using the `person`
var john = Object.create(person);
john.name = "John";
john.gender = "M";
john.age = 47;
john.sayName(); // "My name is John"
// Using `Person` (the constructor function)
var mary = new Person("Mary", "F", 32);
mary.sayName(); // "My name is Mary"
john
получает sayName
от person
, его прототипа; mary
получает sayName
от Person.prototype
, его прототип.
Объекты и функции конструктора - это две разные вещи (концептуально), и не имеет смысла сравнивать их. В основном в первом случае вы создали один объект, тогда как функция-конструктор позволяет динамически создавать множество объектов. –
Я вижу, откуда вы пришли, и соответственно обновил свой ответ. –