Клас Object відображає один з типів даних JavaScript. Він використовується для збереження різноманітних колекцій, що використовують ключі, та більш складних сутностей. Об'єкти можуть бути створені за допомогою конструктора Object() або об'єктного ініціалізатора / літерального синтаксису.
Опис
Майже усі об'єкти у JavaScript є екземплярами Object; типовий об'єкт успадковує властивості (в тому числі методи) від Object.prototype, хоча ці властивості можуть бути перекриті (перевизначені). Однак, можна навмисно створити Object, для якого це буде не так (наприклад, за допомогою Object.create(null)), або змінити його таким чином (наприклад, через Object.setPrototypeOf).
Зміни у прототипі Object видимі усім об'єктам через ланцюжок прототипів, якщо властивості та методи, яких стосуються ці зміни, не були перевизначені далі у ланцюжку прототипів. Це надає дуже потужний, хоча й потенційно небезпечний, механізм для перевизначення або розширення поведінки об'єкта.
Конструктор Object створює обгортку об'єкта для заданого значення.
- Якщо значенням є
nullабоundefined, конструктор створить та поверне порожній об'єкт. - В іншому випадку, він поверне об'єкт того типу, який відповідає наданому значенню.
- Якщо значення вже є об'єктом, конструктор поверне це значення.
Під час виклику не у контексті конструктора, Object поводиться ідентично до new Object().
Дивіться також Ініціалізатор об'єктів / літеральний синтаксис.
Видалення властивості об'єкта
У самому об'єкті не існує методів для видалення своїх властивостей (таких, як Map.prototype.delete()). Щоб зробити це, необхідно скористатись оператором delete.
Конструктор
Object()- Створює новий об'єкт
Object. Це обгортка для наданого значення.
Статичні методи
Object.assign()- Копіює значення усіх перелічуваних особистих властивостей з одного або більше об'єктів у цільовий об'єкт.
Object.create()- Створює новий об'єкт із вказаним прототипним об'єктом і властивостями.
Object.defineProperty()- Додає зазначену властивість, описану наданим дескриптором, до об'єкта.
Object.defineProperties()- Додає зазначені властивості, описані наданими дескрипторами, до об'єкта.
Object.entries()- Повертає масив, що містить усі пари
[key, value]особистих перелічуваних рядкових властивостей данного об'єкта. Object.freeze()- Заморожує об'єкт: інший код не може видаляти або змінювати будь-які властивості.
Object.fromEntries()- Повертає новий об'єкт з ітерабельного об'єкта, що містить пари ключ-значення (зворотний до
Object.entries). Object.getOwnPropertyDescriptor()- Повертає дескриптор властивості для зазначенної властивості об'єкта.
Object.getOwnPropertyDescriptors()- Повертає об'єкт, що містить дескриптори всіх особистих властивостей об'єкта.
Object.getOwnPropertyNames()- Повертає масив, що містить імена всіх особистих перелічуваних і неперелічуванних властивостей даного об'єкта.
Object.getOwnPropertySymbols()- Повертає масив усіх символьних властивостей, знайдених безпосередньо на даному об'єкті.
Object.getPrototypeOf()- Повертає прототип вказаного об'єкта.
Object.is()- Перевіряє, чи мають два аргументи однакове значення. Прирівнює усі значення NaN (що відрізняється як від абстрактної рівності, так і від строгої рівності).
Object.isExtensible()- Визначає, чи дозволене розширення об'єкта.
Object.isFrozen()- Визначає, чи є об'єкт замороженим.
Object.isSealed()- Визначає, чи є об'єкт запечатанним.
Object.keys()- Повертає масив, що містить імена всіх особистих перелічуваних рядкових властивостей даного об'єкта.
Object.preventExtensions()- Запобігає будь-яким розширенням об'єкта.
Object.seal()- Запобігає можливості іншого коду видаляти властивості об'єкта.
Object.setPrototypeOf()- Встановлює прототип (тобто, внутрішню властивість
[[Prototype]]об'єкта). Object.values()- Повертає масив, який містить значення, що відповідають усім особистим перелічуваним рядковим властивостям даного об'єкта.
Властивості екземплярів
Object.prototype.constructor- Визначає функцію, що створює прототип об'єкта.
Object.prototype.__proto__- Вказує на об'єкт, що був використаний як прототип, коли створювався екземпляр об'єкта.
Object.prototype.__noSuchMethod__- Дозволяє визначити функцію, яка буде виконуватись, коли на об'єкті викликатиметься неіснуючий елемент.
Методи екземплярів
Object.prototype.__defineGetter__()- Прив'язує функцію до властивості, яка, під час звернення до неї, викликатиме цю функцію та повертатиме значення, яке повернула функція.
Object.prototype.__defineSetter__()- Прив'язує функцію до властивості, яка, під час присвоєння, виконує цю функцію, яка змінює властивість.
Object.prototype.__lookupGetter__()- Повертає функцію, прив'язану до вказаної властивості методом
__defineGetter__(). Object.prototype.__lookupSetter__()- Повертає функцію, прив'язану до вказаної властивості методом
__defineSetter__(). Object.prototype.hasOwnProperty()- Повертає булеве значення, що вказує, чи об'єкт містить вказану властивість як особисту властивість цього об'єкта, а не успадковану через ланцюжок прототипів.
Object.prototype.isPrototypeOf()- Повертає булеве значення, що вказує, чи присутній об'єкт, на якому викликається цей метод, у ланцюжку прототипів вказаного об'єкта.
Object.prototype.propertyIsEnumerable()- Повертає булеве значення, що вказує, чи встановлений внутрішній атрибут ECMAScript [[Enumerable]].
Object.prototype.toLocaleString()- Викликає
toString(). Object.prototype.toString()- Повертає рядок, що відображає об'єкт.
Object.prototype.unwatch()- Прибирає точку спостереження з властивості об'єкта.
Object.prototype.valueOf()- Повертає просту величину вказаного об'єкта.
Object.prototype.watch()- Додає точку спостереження до властивості об'єкта.
Приклади
Використання Object з типами undefined та null
Наступні приклади зберігають порожній об'єкт Object в o:
var o = new Object();
var o = new Object(undefined);
var o = new Object(null);
Використання Object для створення об'єктів Boolean
Наступні приклади зберігають об'єкти Boolean у o:
// еквівалентно до o = new Boolean(true); var o = new Object(true);
// еквівалентно до o = new Boolean(false); var o = new Object(Boolean());
Прототипи об'єктів
Змінюючи поведінку існуючих методів Object.prototype, розгляньте включення коду додаванням вашого розширення до чи після існуючої логіки. Наприклад, цей (неперевірений) код буде попередньо виконувати власну логіку перед тим, як буде виконано вбудовану логіку або інше розширення.
Коли викликається функція, аргументи виклику містяться у подібній до масиву "змінній" arguments. Наприклад, у виклику myFn(a, b, c), arguments, що знаходиться у тілі myFn, міститиме 3 подібні до масиву елементи, що відповідають (a, b, c).
Модифікуючи прототипи з хуками, просто передайте this та arguments (стан виклику) до поточної поведінки, викликавши apply() на функції. Цей шаблон може використовуватись для будь-яких прототипів, наприклад, Node.prototype, Function.prototype, і т. д.
var current = Object.prototype.valueOf;
// Оскільки моя властивість "-prop-value" є наскрізною та не завжди
// знаходиться в тому самому ланцюжку прототипів, я хочу змінити Object.prototype:
Object.prototype.valueOf = function() {
if (this.hasOwnProperty('-prop-value')) {
return this['-prop-value'];
} else {
// Це не схоже на один з моїх об'єктів, тому повернемось
// до початкової поведінки, відтворивши поточну поведінку якнайкраще.
// Метод apply поводиться як "super" у деяких інших мовах.
// І хоча valueOf() не приймає аргументів, можливо, інший хук їх прийматиме.
return current.apply(this, arguments);
}
}
Оскільки JavaScript, насправді, не має об'єктів підкласу, прототип є зручним обхідним рішенням для створення об'єкта у ролі "базового класу" з певними функціями, що діють як об'єкти. Наприклад:
var Person = function(name) {
this.name = name;
this.canTalk = true;
};
Person.prototype.greet = function() {
if (this.canTalk) {
console.log('Привіт, я ' + this.name);
}
};
var Employee = function(name, title) {
Person.call(this, name);
this.title = title;
};
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.greet = function() {
if (this.canTalk) {
console.log('Привіт, я ' + this.name + ', ' + this.title);
}
};
var Customer = function(name) {
Person.call(this, name);
};
Customer.prototype = Object.create(Person.prototype);
var Mime = function(name) {
Person.call(this, name);
this.canTalk = false;
};
Mime.prototype = Object.create(Person.prototype);
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 (ECMA-262) The definition of 'Object' in that specification. |
Сумісність з веб-переглядачами
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Object | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
Object() constructor | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
assign | Chrome Full support 45 | Edge Full support 12 | Firefox Full support 34 | IE No support No | Opera Full support 32 | Safari Full support 9 | WebView Android Full support 45 | Chrome Android Full support 45 | Firefox Android Full support 34 | Opera Android Full support 32 | Safari iOS Full support 9 | Samsung Internet Android Full support 5.0 | nodejs Full support 4.0.0 |
constructor | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
create | Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 11.6 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 5 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
__defineGetter__ | Chrome Full support 1 | Edge Full support 12 | Firefox
Full support
1
| IE Full support 11 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
defineProperties | Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 11.6 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 5 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
defineProperty | Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | IE
Full support
9
| Opera Full support 11.6 | Safari
Full support
5.1
| WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS
Full support
6
| Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
__defineSetter__ | Chrome Full support 1 | Edge Full support 12 | Firefox
Full support
1
| IE Full support 11 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
entries | Chrome Full support 54 | Edge Full support 14 | Firefox Full support 47 | IE No support No | Opera Full support 41 | Safari Full support 10.1 | WebView Android Full support 54 | Chrome Android Full support 54 | Firefox Android Full support 47 | Opera Android Full support 41 | Safari iOS Full support 10.3 | Samsung Internet Android Full support 6.0 | nodejs
Full support
7.0.0
|
freeze | Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 6 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
fromEntries | Chrome Full support 73 | Edge Full support 79 | Firefox Full support 63 | IE No support No | Opera Full support 60 | Safari Full support 12.1 | WebView Android Full support 73 | Chrome Android Full support 73 | Firefox Android Full support 63 | Opera Android No support No | Safari iOS Full support 12.2 | Samsung Internet Android No support No | nodejs Full support 12.0.0 |
getOwnPropertyDescriptor | Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | IE
Full support
9
| Opera Full support 12 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 5 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
getOwnPropertyDescriptors | Chrome Full support 54 | Edge Full support 15 | Firefox Full support 50 | IE No support No | Opera Full support 41 | Safari Full support 10 | WebView Android Full support 54 | Chrome Android Full support 54 | Firefox Android Full support 50 | Opera Android Full support 41 | Safari iOS Full support 10 | Samsung Internet Android Full support 6.0 | nodejs
Full support
7.0.0
|
getOwnPropertyNames | Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 12 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 5 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
getOwnPropertySymbols | Chrome Full support 38 | Edge Full support 12 | Firefox Full support 36 | IE No support No | Opera Full support 25 | Safari Full support 9 | WebView Android Full support 38 | Chrome Android Full support 38 | Firefox Android Full support 36 | Opera Android Full support 25 | Safari iOS Full support 9 | Samsung Internet Android Full support 3.0 | nodejs Full support 0.12 |
getPrototypeOf | Chrome Full support 5 | Edge Full support 12 | Firefox Full support 3.5 | IE Full support 9 | Opera Full support 12.1 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12.1 | Safari iOS Full support 5 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
hasOwnProperty | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 5.5 | Opera Full support 5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
is | Chrome Full support 30 | Edge Full support 12 | Firefox Full support 22 | IE No support No | Opera Full support 17 | Safari Full support 9 | WebView Android Full support ≤37 | Chrome Android Full support 30 | Firefox Android Full support 22 | Opera Android Full support 18 | Safari iOS Full support 9 | Samsung Internet Android Full support 2.0 | nodejs Full support 0.10 |
isExtensible | Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 6 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
isFrozen | Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 6 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
isPrototypeOf | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 9 | Opera Full support 4 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
isSealed | Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 6 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
keys | Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 12 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 5 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
__lookupGetter__ | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 11 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
__lookupSetter__ | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 11 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
preventExtensions | Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 6 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
propertyIsEnumerable | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 5.5 | Opera Full support 4 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
__proto__ | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 11 | Opera Full support 10.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 11 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
seal | Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 12 | Safari iOS Full support 6 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
setPrototypeOf | Chrome Full support 34 | Edge Full support 12 | Firefox Full support 31 | IE Full support 11 | Opera Full support 21 | Safari Full support 9 | WebView Android Full support 37 | Chrome Android Full support 34 | Firefox Android Full support 31 | Opera Android Full support 21 | Safari iOS Full support 9 | Samsung Internet Android Full support 2.0 | nodejs Full support 0.12 |
toLocaleString | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 5.5 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
toSource | Chrome No support No | Edge No support No | Firefox
No support
1 — 74
| IE No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox Android Full support 4 | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No | nodejs No support No |
toString() | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
valueOf | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
values | Chrome Full support 54 | Edge Full support 14 | Firefox Full support 47 | IE No support No | Opera Full support 41 | Safari Full support 10.1 | WebView Android Full support 54 | Chrome Android Full support 54 | Firefox Android Full support 47 | Opera Android Full support 41 | Safari iOS Full support 10.3 | Samsung Internet Android Full support 6.0 | nodejs
Full support
7.0.0
|
Legend
- Full support
- Full support
- No support
- No support
- Non-standard. Expect poor cross-browser support.
- Non-standard. Expect poor cross-browser support.
- Deprecated. Not for use in new websites.
- Deprecated. Not for use in new websites.
- See implementation notes.
- See implementation notes.
- User must explicitly enable this feature.
- User must explicitly enable this feature.