Все объекты 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.