Расширение объектов. Prototype
Cвойство User.prototype представляет прототип объектов User.
И любые свойства и методы, которые будут определены в User.prototype, будут общими для всех объектов User.
Например, после определения объекта User нам потребовалось добавить к нему метод и свойство:
function User(pName, pAge) {
this.name = pName;
this.age = pAge;
this.displayInfo = function(){
document.write("Имя: " + this.name + "; возраст: " + this.age + "<.br/>");
};
};
User.prototype.hello = function(){
document.write(this.name + " говорит: 'Привет!'<.br/>");
};
User.prototype.maxAge = 110;
var tom = new User("Том", 26);
tom.hello();
var john = new User("Джон", 28);
john.hello();
console.log(tom.maxAge); // 110
console.log(john.maxAge); // 110
Здесь добавлены метод hello и свойство maxAge, и каждый объект User сможет их использовать.
Но важно заметить, что значение свойства maxAge будет одно и то же для всех объектов,
это разделяемое статическое свойство.
В отличие, скажем, от свойства this.name, которое хранит значение для определенного объекта.
В то же время мы можем определить в объекте свойство, которое будет назваться также, как и свойство прототипа. В этом случае собственное свойство объекта будет иметь приоритет перед свойством прототипа:
User.prototype.maxAge = 110;
var tom = new User("Том", 26);
var john = new User("Джон", 28);
tom.maxAge = 99;
console.log(tom.maxAge); // 99
console.log(john.maxAge); // 110
И при обращении к свойству maxAge javascript сначала ищет это свойство среди свойств объекта, и если оно не было найдено, тогда обращается к свойствам прототипа. То же самое касается и методов.
Output