Атрибут prototype
Атрибут prototype объекта определяет объект, от которого наследуются свойства.
Важно понимать, что когда в программном коде встречается ссылка prototype, она обозначает обычное свойство объекта, а не атрибут prototype.
Атрибут prototype устанавливается в момент создания объекта.
- Для объектов, созданных с помощью литералов, прототипом является
Object.prototype. - Прототипом объекта, созданного с помощью оператора new, является значение
свойства prototype конструктора. - Прототипом объекта, созданного с помощью
Object.create(), становится первый аргумент этой функции (который может иметь значение null).
Стандартом ECMAScript 5 предусматривается возможность определить прототип любого объекта, если передать его методу Object.getPrototypeOf().
Чтобы определить, является ли один объект прототипом (или звеном в цепочке прототипов) другого объекта, следует использовать метод isPrototypeOf(). Чтобы узнать, является ли p прототипом o, нужно записать выражение p.isPrototypeOf(o).
Например:
var p = {x:1}; // Определить объект-прототип.
var o = Object.create(p); // Создать объект с этим прототипом.
p.isPrototypeOf(o) // => true: o наследует p
Object.prototype.isPrototypeOf(p) // => true: p наследует Object.prototype
P.S: В реализации JavaScript компании Mozilla (первоначально созданной в Netscape) значение атрибута prototypeдоступно через специальное свойство __proto__, которое можно использовать напрямую для определения и установки прототипа любого объекта. Использование свойства __proto__ ухудшает переносимость: оно отсутствует в реализациях броузеров IE или Opera, хотя в настоящее время оно поддерживается броузерами Safari и Chrome. Версии Firefox, реализующие стандарт ECMAScript 5, все еще поддерживают свойство __proto__, но не позволяют изменять прототип нерасширяемых объектов.