Object.prototype

Сводка

Свойство Object.prototype представляет объект прототипа Object.

Атрибуты свойстваObject.prototype
Записываемое нет
Перечисляемое нет
Настраиваемое нет

Описание

Все объекты в JavaScript являются потомками Object; все объекты наследуют методы и свойства из прототипа объекта Object.prototype, хотя они и могут быть переопределены (за исключением объекта Object с прототипом null, то есть, созданным вызовом Object.create(null)). Например, прототипы других конструкторов переопределяют свойство constructor и предоставляют свои собственные методы toString(). Изменения в объекте прототипа Object распространяются на все объекты до тех пор, пока свойства и методы, учитывающие эти изменения, не переопределяются дальше по цепочке прототипов.

Свойства

Object.prototype.constructor
Определяет функцию, создающую прототип объекта.
Object.prototype.__proto__ Это API не было стандартизировано.
Указывает на объект, который использовался в качестве прототипа при инстанцировании объекта.
Object.prototype.__noSuchMethod__ Это API не было стандартизировано.
Позволяет определить функцию, выполняющуюся при вызове в качестве метода неопределённого члена объекта.
Object.prototype.__count__ Этот API вышел из употребления и его работа больше не гарантируется.
Использовалось для возврата количества перечисляемых свойств, определённых напрямую на пользовательском объекте, но было удалено.
Object.prototype.__parent__ Этот API вышел из употребления и его работа больше не гарантируется.
Использовалось для указания контекста объекта, но было удалено.

Методы

Object.prototype.__defineGetter__() Это API не было стандартизировано. Это устаревшее API больше не должно использоваться, но оно по-прежнему может работать.
Ассоциирует функцию со свойством, которое, при доступе к нему, выполняет эту функцию и возвращает её возвращаемое значение.
Object.prototype.__defineSetter__() Это API не было стандартизировано. Это устаревшее API больше не должно использоваться, но оно по-прежнему может работать.
Ассоциирует функцию со свойством, которое, при его установке, выполняет эту функцию, изменяющую свойство.
Object.prototype.__lookupGetter__() Это API не было стандартизировано. Это устаревшее API больше не должно использоваться, но оно по-прежнему может работать.
Возвращает функцию, ассоциированную с указанным свойством методом __defineGetter__.
Object.prototype.__lookupSetter__() Это API не было стандартизировано. Это устаревшее API больше не должно использоваться, но оно по-прежнему может работать.
Возвращает функцию, ассоциированную с указанным свойством методом __defineSetter__.
Object.prototype.hasOwnProperty()
Возвращает логическое значение, указывающее, содержит ли указанное свойство непосредственно объект, или он унаследовал его по цепочке прототипов.
Object.prototype.isPrototypeOf()
Возвращает логическое значение, указывающее, состоит ли указанный объект в цепочке прототипов объекта, на котором был вызван данный метод.
Object.prototype.propertyIsEnumerable()
Возвращает логическое значение, указывающее, установлен ли внутренний атрибут ECMAScript DontEnum.
Object.prototype.toSource() Это API не было стандартизировано.
Возвращает строку, содержащую исходный код объекта в литеральной форме, представляющего объект, на котором был вызван данный метод; вы можете использовать это значение для создания нового объекта.
Object.prototype.toLocaleString()
Вызывает toString().
Object.prototype.toString()
Возвращает строковое представление объекта.
Object.prototype.unwatch() Это API не было стандартизировано.
Удаляет точку наблюдения (watchpoint) со свойства объекта.
Object.prototype.valueOf()
Возвращает значение примитива указанного объекта.
Object.prototype.watch() Это API не было стандартизировано.
Добавляет точку наблюдения (watchpoint) к свойству объекта.
Object.prototype.eval() Этот API вышел из употребления и его работа больше не гарантируется.
Использовался для вычисления строки с JavaScript-кодом в контексте указанного объекта, но был удалён.

Примеры

Поскольку Javascript, строго говоря, не имеет объекты подклассов, прототип является полезным обходным путём создания объекта «базового класса» из определённых функций, которые выступают в роли объектов. Например:

var Person = function(name) {
    this.name = name;
    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 2015 (6th Edition, ECMA-262)
Определение 'Object.prototype' в этой спецификации.
Стандарт

Совместимость с браузерами

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) (Да) (Да) (Да) (Да)
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) (Да) (Да) (Да) (Да)