Сводка
Свойство Object.prototype
представляет объект прототипа Object
.
Атрибуты свойстваObject.prototype |
|
---|---|
Записываемое | нет |
Перечисляемое | нет |
Настраиваемое | нет |
Описание
Все объекты в JavaScript являются потомками Object
; все объекты наследуют методы и свойства из прототипа объекта Object.prototype
, хотя они и могут быть переопределены (за исключением объекта Object
с прототипом null
, то есть, созданным вызовом Object.create(null)
). Например, прототипы других конструкторов переопределяют свойство constructor
и предоставляют свои собственные методы toString()
. Изменения в объекте прототипа Object
распространяются на все объекты до тех пор, пока свойства и методы, учитывающие эти изменения, не переопределяются дальше по цепочке прототипов.
Свойства
Object.prototype.constructor
- Определяет функцию, создающую прототип объекта.
Object.prototype.__proto__
- Указывает на объект, который использовался в качестве прототипа при инстанцировании объекта.
Object.prototype.__noSuchMethod__
- Позволяет определить функцию, выполняющуюся при вызове в качестве метода не определённого члена объекта.
Object.prototype.__count__
Использовалось для возврата количества перечисляемых свойств, определённых напрямую на пользовательском объекте, но было удалено.Object.prototype.__parent__
Использовалось для указания контекста объекта, но было удалено.
Методы
Object.prototype.__defineGetter__()
- Ассоциирует функцию со свойством, которое, при доступе к нему, выполняет эту функцию и возвращает её возвращаемое значение.
Object.prototype.__defineSetter__()
- Ассоциирует функцию со свойством, которое, при его установке, выполняет эту функцию, изменяющую свойство.
Object.prototype.__lookupGetter__()
- Возвращает функцию, ассоциированную с указанным свойством методом
__defineGetter__
. Object.prototype.__lookupSetter__()
- Возвращает функцию, ассоциированную с указанным свойством методом
__defineSetter__
. Object.prototype.hasOwnProperty()
- Возвращает логическое значение, указывающее, содержит ли указанное свойство непосредственно объект, или он унаследовал его по цепочке прототипов.
Object.prototype.isPrototypeOf()
- Возвращает логическое значение, указывающее, состоит ли указанный объект в цепочке прототипов объекта, на котором был вызван данный метод.
Object.prototype.propertyIsEnumerable()
- Возвращает логическое значение, указывающее, установлен ли внутренний атрибут ECMAScript DontEnum.
Object.prototype.toSource()
- Возвращает строку, содержащую исходный код объекта в литеральной форме, представляющего объект, на котором был вызван данный метод; вы можете использовать это значение для создания нового объекта.
Object.prototype.toLocaleString()
- Вызывает
toString()
. Object.prototype.toString()
- Возвращает строковое представление объекта.
Object.prototype.unwatch()
- Удаляет точку наблюдения (watchpoint) со свойства объекта.
Object.prototype.valueOf()
- Возвращает значение примитива указанного объекта.
Object.prototype.watch()
- Добавляет точку наблюдения (watchpoint) к свойству объекта.
Object.prototype.eval()
Использовался для вычисления строки с JavaScript-кодом в контексте указанного объекта, но был удалён.
Примеры
Поскольку Javascript, строго говоря, не имеет объекты подклассов, прототип является полезным обходным путём создания объекта «базового класса» из определённых функций, которые выступают в роли объектов. Например:
var Person = function() { this.canTalk = true; this.greet = function() { if (this.canTalk) { console.log('Привет, я ' + this.name); } }; }; var Employee = function(name, title) { this.name = name; this.title = title; this.greet = function() { if (this.canTalk) { console.log('Привет, я ' + this.name + ', ' + this.title); } }; }; Employee.prototype = new Person(); var Customer = function(name) { this.name = name; }; Customer.prototype = new Person(); var Mime = function(name) { this.name = name; this.canTalk = false; }; Mime.prototype = new Person(); var bob = new Employee('Боб', 'Строитель'); var joe = new Customer('Джо'); var rg = new Employee('Ред Грин', 'Разнорабочий'); var mike = new Customer('Майк'); var mime = new Mime('Мим'); bob.greet(); joe.greet(); rg.greet(); mike.greet(); mime.greet();
Вывод будет следующим:
Привет, я Боб, Строитель Привет, я Джо Привет, я Ред Грин, Разнорабочий Привет, я Майк
Спецификации
Спецификация | Статус | Комментарии |
---|---|---|
ECMAScript 1-е издание. | Стандарт | Изначальное определение. Реализована в JavaScript 1.0. |
ECMAScript 5.1 (ECMA-262) Определение 'Object.prototype' в этой спецификации. |
Стандарт | |
ECMAScript 6 (ECMA-262) Определение 'Object.prototype' в этой спецификации. |
Кандидат в рекомендации |
Совместимость с браузерами
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) |
Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |