Ваш первый пример был литералом объекта:
var person = {
name: "Bob",
//etc
};
Вы создали один объект с именем person, и это все.Концепция создания новых людей не имеет смысла.
Если вы хотите создать что-то, что можно использовать для создания большего количества объектов по желанию, вы должны использовать функцию, как в вашем втором примере.
Обратите внимание, что функции предназначены для использования в качествеконструктор начинается с заглавной буквы по соглашению.Также обратите внимание, что когда вы устанавливаете функцию внутри вашего конструктора, используя
this.functionName = function() .....
, это создает привилегированную функцию, поскольку она имеет доступ как к открытым, так и к закрытым членам.Если этой функции набора нужен только доступ к публичным свойствам, она обычно добавляется к функции prototype
.Вот как все это может выглядеть
function Person() {
this.name = "";
this.age = 0;
};
Person.prototype.set = function(name,age) {
this.name = name;
this.age = age;
}
А вот как может выглядеть привилегированный метод
function Person() {
var localData = "Hello";
this.showPrivateData = function() {
alert(localData);
};
this.name="";
this.age=0;
};
localData
локально для функции Person
и недоступенкак собственность на экземпляры лица;однако функция showPrivateData
и любые другие привилегированные функции, которые вы могли бы добавить, образовали бы замыкание над ней и имели бы к ней доступ.
Наконец, обратите внимание, что функции конструктора могут принимать параметры:
function Person(name, age) {
this.name= name;
this.age= age;
};