Прототипы объектов JavaScript

Все объекты JavaScript наследуют свойства и методы своих прототипов.

В предыдущей главе мы узнали, как использовать конструктор объекта:


function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
}
var myFather = new Person("John", "Doe", 50, "blue");
var myMother = new Person("Sally", "Rally", 48, "green"); 

Мы также узнали, что нельзя добавлять новые свойства к существующему конструктору объекта обычным способом:


Person.nationality = "English"; // Ошибка

Чтобы добавить новое свойство к конструктору, вы должны добавить его в функцию конструктора:


function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
    this.nationality = "English";
} 

Наследование прототипа

Все объекты JavaScript наследуют свойства и методы своих прототипов.

  • Объекты Date наследуют от Date.prototype
  • Объекты Array наследуют от Array.prototype
  • Объекты Person наследуют от Person.prototype

На вершине всей цепочки наследования прототипов находится Object.prototype. Так, все объекты Date, Array и Person наследуют от Object.prototype.

Добавление свойств и методов к объектам

Иногда нужно добавить новые свойства (или методы) ко всем существующим объектам определенного типа.

Иногда нужно добавить новые свойства (или методы) к конструктору объекта.

Использование свойства prototype

Свойство prototype объектов JavaScript позволяет добавлять новые свойства к конструктору объекта:


function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English"; 

Также, свойство prototype позволяет добавлять к конструктору объекта новые методы:


function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
}
Person.prototype.name = function() {
    return this.firstName + " " + this.lastName;
}; 

Внимание! Изменяйте только свои прототипы. Никогда не изменяйте прототипы стандартных объектов JavaScript.