Проблема скорее связана с замыканием, а не с прототипами.
Поскольку метод-прототип является общим для всех объектов, а ваш метод-прототип setAge обновляет возраст закрытия.
теперь каждый раз, когда высоздайте объект, он создаст для него новое замыкание, поэтому ваш прототип будет ссылаться на последнее созданное замыкание.
проверьте приведенный ниже пример, независимо от того, для какого объекта вы устанавливаете значение, оно всегда будет обновляться для последнего.
Вот почему в большинстве случаев не рекомендуется использовать прототип внутри функции.
см. Установка функции прототипа javascript в объявлении класса объекта для получения дополнительной информации.
function Person() {
var age = 18;
Person.prototype.getAge = function() {
return age;
};
Person.prototype.setAge = function(value) {
age = value;
}
this.getAge1 = function() {
return age;
};
this.setAge1 = function(value) {
age = value;
}
};
marry = new Person();
jack = new Person();
marry.setAge(22);
console.log(marry.getAge()); //output 22
console.log(jack.getAge()); //output 22
console.log(marry.getAge1()); //output 18
console.log(jack.getAge1()); //output 22
console.log("---------------------------------------------")
jack = new Person();
marry = new Person();
marry.setAge(22);
console.log(marry.getAge()); //output 22
console.log(jack.getAge()); //output 22
console.log(marry.getAge1()); //output 22
console.log(jack.getAge1()); //output 18