diff options
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/object/index.html')
| -rw-r--r-- | files/uk/web/javascript/reference/global_objects/object/index.html | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/global_objects/object/index.html b/files/uk/web/javascript/reference/global_objects/object/index.html new file mode 100644 index 0000000000..6fdb6e8adb --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/object/index.html @@ -0,0 +1,267 @@ +--- +title: Object +slug: Web/JavaScript/Reference/Global_Objects/Object +tags: + - Constructor + - JavaScript + - NeedsTranslation + - Object + - TopicStub +translation_of: Web/JavaScript/Reference/Global_Objects/Object +--- +<div>{{JSRef}}</div> + +<p>Клас <code><strong>Object</strong></code> відображає один з <a href="/uk/docs/Web/JavaScript/Data_structures">типів даних JavaScript</a>. Він використовується для збереження різноманітних колекцій, що використовують ключі, та більш складних сутностей. Об'єкти можуть бути створені за допомогою конструктора {{jsxref("Object/Object", "Object()")}} або <a href="/uk/docs/Web/JavaScript/Reference/Operators/Ініціалізація_об’єктів">об'єктного ініціалізатора / літерального синтаксису</a>.</p> + +<h2 id="Опис">Опис</h2> + +<p>Майже усі об'єкти у JavaScript є екземплярами {{jsxref("Object")}}; типовий об'єкт успадковує властивості (в тому числі методи) від <code>Object.prototype</code>, хоча ці властивості можуть бути перекриті (перевизначені). Однак, можна навмисно створити <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">Object</span></font>, для якого це буде не так (наприклад, за допомогою {{jsxref("Object.create", "Object.create(null)")}}), або змінити його таким чином (наприклад, через {{jsxref("Object.setPrototypeOf")}}).</p> + +<p>Зміни у прототипі <code>Object</code> видимі <strong>усім</strong> об'єктам через ланцюжок прототипів, якщо властивості та методи, яких стосуються ці зміни, не були перевизначені далі у ланцюжку прототипів. Це надає дуже потужний, хоча й потенційно небезпечний, механізм для перевизначення або розширення поведінки об'єкта.</p> + +<p><font face="Open Sans, Arial, sans-serif">Конструктор </font><code>Object</code> створює обгортку об'єкта для заданого значення.</p> + +<ul> + <li>Якщо значенням є {{jsxref("null")}} або {{jsxref("undefined")}}, конструктор створить та поверне порожній об'єкт.</li> + <li>В іншому випадку, він поверне об'єкт того типу, який відповідає наданому значенню.</li> + <li>Якщо значення вже є об'єктом, конструктор поверне це значення.</li> +</ul> + +<p>Під час виклику не у контексті конструктора, <code>Object</code> поводиться ідентично до <code>new Object()</code>.</p> + +<p>Дивіться також <a href="/uk/docs/Web/JavaScript/Reference/Operators/Ініціалізація_об’єктів">Ініціалізатор об'єктів / літеральний синтаксис</a>.</p> + +<h3 id="Видалення_властивості_обєкта">Видалення властивості об'єкта</h3> + +<p>У самому об'єкті не існує методів для видалення своїх властивостей (таких, як {{jsxref("Map.prototype.delete", "Map.prototype.delete()")}}). Щоб зробити це, необхідно скористатись <a href="/uk/docs/Web/JavaScript/Reference/Operators/delete">оператором delete</a>.</p> + +<h2 id="Конструктор">Конструктор</h2> + +<dl> + <dt>{{jsxref("Object/Object", "Object()")}}</dt> + <dd>Створює новий об'єкт <code>Object</code>. Це обгортка для наданого значення.</dd> +</dl> + +<h2 id="Статичні_методи">Статичні методи</h2> + +<dl> + <dt>{{jsxref("Object.assign()")}}</dt> + <dd>Копіює значення усіх перелічуваних особистих властивостей з одного або більше об'єктів у цільовий об'єкт.</dd> + <dt>{{jsxref("Object.create()")}}</dt> + <dd>Створює новий об'єкт із вказаним прототипним об'єктом і властивостями.</dd> + <dt>{{jsxref("Object.defineProperty()")}}</dt> + <dd>Додає зазначену властивість, описану наданим дескриптором, до об'єкта.</dd> + <dt>{{jsxref("Object.defineProperties()")}}</dt> + <dd>Додає зазначені властивості, описані наданими дескрипторами, до об'єкта.</dd> + <dt>{{jsxref("Object.entries()")}}</dt> + <dd>Повертає масив, що містить усі пари <code>[key, value]</code> <strong>особистих</strong> перелічуваних рядкових властивостей данного об'єкта.</dd> + <dt>{{jsxref("Object.freeze()")}}</dt> + <dd>Заморожує об'єкт: інший код не може видаляти або змінювати будь-які властивості.</dd> + <dt>{{jsxref("Object.fromEntries()")}}</dt> + <dd>Повертає новий об'єкт з ітерабельного об'єкта, що містить пари ключ-значення (зворотний до {{jsxref("Object.entries")}}).</dd> + <dt>{{jsxref("Object.getOwnPropertyDescriptor()")}}</dt> + <dd>Повертає дескриптор властивості для зазначенної властивості об'єкта.</dd> + <dt>{{jsxref("Object.getOwnPropertyDescriptors()")}}</dt> + <dd>Повертає об'єкт, що містить дескриптори всіх особистих властивостей об'єкта.</dd> + <dt>{{jsxref("Object.getOwnPropertyNames()")}}</dt> + <dd>Повертає масив, що містить імена всіх <strong>особистих</strong> перелічуваних і неперелічуванних властивостей даного об'єкта.</dd> + <dt>{{jsxref("Object.getOwnPropertySymbols()")}}</dt> + <dd>Повертає масив усіх символьних властивостей, знайдених безпосередньо на даному об'єкті.</dd> + <dt>{{jsxref("Object.getPrototypeOf()")}}</dt> + <dd>Повертає прототип вказаного об'єкта.</dd> + <dt>{{jsxref("Object.is()")}}</dt> + <dd>Перевіряє, чи мають два аргументи однакове значення. Прирівнює усі значення NaN (що відрізняється як від абстрактної рівності, так і від строгої рівності).</dd> + <dt>{{jsxref("Object.isExtensible()")}}</dt> + <dd>Визначає, чи дозволене розширення об'єкта.</dd> + <dt>{{jsxref("Object.isFrozen()")}}</dt> + <dd>Визначає, чи є об'єкт замороженим.</dd> + <dt>{{jsxref("Object.isSealed()")}}</dt> + <dd>Визначає, чи є об'єкт запечатанним.</dd> + <dt>{{jsxref("Object.keys()")}}</dt> + <dd>Повертає масив, що містить імена всіх <strong>особистих</strong> перелічуваних рядкових властивостей даного об'єкта.</dd> + <dt>{{jsxref("Object.preventExtensions()")}}</dt> + <dd>Запобігає будь-яким розширенням об'єкта.</dd> + <dt>{{jsxref("Object.seal()")}}</dt> + <dd>Запобігає можливості іншого коду видаляти властивості об'єкта.</dd> + <dt>{{jsxref("Object.setPrototypeOf()")}}</dt> + <dd>Встановлює прототип (тобто, внутрішню властивість <code>[[Prototype]]</code> об'єкта).</dd> + <dt>{{jsxref("Object.values()")}}</dt> + <dd>Повертає масив, який містить значення, що відповідають усім <strong>особистим</strong> перелічуваним рядковим властивостям даного об'єкта.</dd> +</dl> + +<h2 id="Властивості_екземплярів">Властивості екземплярів </h2> + +<dl> + <dt>{{jsxref("Object.prototype.constructor")}}</dt> + <dd>Визначає функцію, що створює прототип об'єкта.</dd> + <dt>{{jsxref("Object.prototype.proto","Object.prototype.__proto__")}}</dt> + <dd>Вказує на об'єкт, що був використаний як прототип, коли створювався екземпляр об'єкта.</dd> + <dt>{{jsxref("Object.prototype.noSuchMethod","Object.prototype.__noSuchMethod__")}}</dt> + <dd>Дозволяє визначити функцію, яка буде виконуватись, коли на об'єкті викликатиметься неіснуючий елемент.</dd> +</dl> + +<h2 id="Методи_екземплярів">Методи екземплярів</h2> + +<dl> + <dt>{{jsxref("Object.prototype.__defineGetter__()")}}</dt> + <dd>Прив'язує функцію до властивості, яка, під час звернення до неї, викликатиме цю функцію та повертатиме значення, яке повернула функція.</dd> + <dt>{{jsxref("Object.prototype.__defineSetter__()")}}</dt> + <dd>Прив'язує функцію до властивості, яка, під час присвоєння, виконує цю функцію, яка змінює властивість.</dd> + <dt>{{jsxref("Object.prototype.__lookupGetter__()")}}</dt> + <dd>Повертає функцію, прив'язану до вказаної властивості методом {{jsxref("Object.prototype.__defineGetter__()", "__defineGetter__()")}}.</dd> + <dt>{{jsxref("Object.prototype.__lookupSetter__()")}}</dt> + <dd>Повертає функцію, прив'язану до вказаної властивості методом {{jsxref("Object.prototype.__defineSetter__()", "__defineSetter__()")}}.</dd> + <dt>{{jsxref("Object.prototype.hasOwnProperty()")}}</dt> + <dd>Повертає булеве значення, що вказує, чи об'єкт містить вказану властивість як особисту властивість цього об'єкта, а не успадковану через ланцюжок прототипів.</dd> + <dt>{{jsxref("Object.prototype.isPrototypeOf()")}}</dt> + <dd>Повертає булеве значення, що вказує, чи присутній об'єкт, на якому викликається цей метод, у ланцюжку прототипів вказаного об'єкта.</dd> + <dt>{{jsxref("Object.prototype.propertyIsEnumerable()")}}</dt> + <dd>Повертає булеве значення, що вказує, чи встановлений внутрішній <a href="/uk/docs/Web/JavaScript/Data_structures#Properties">атрибут ECMAScript [[Enumerable]]</a>.</dd> + <dt>{{jsxref("Object.prototype.toLocaleString()")}}</dt> + <dd>Викликає {{jsxref("Object.toString", "toString()")}}.</dd> + <dt>{{jsxref("Object.prototype.toString()")}}</dt> + <dd>Повертає рядок, що відображає об'єкт.</dd> + <dt>{{jsxref("Object.prototype.unwatch()")}}</dt> + <dd>Прибирає точку спостереження з властивості об'єкта.</dd> + <dt>{{jsxref("Object.prototype.valueOf()")}}</dt> + <dd>Повертає просту величину вказаного об'єкта.</dd> + <dt>{{jsxref("Object.prototype.watch()")}} {{non-standard_inline}}</dt> + <dd>Додає точку спостереження до властивості об'єкта.</dd> +</dl> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Використання_Object_з_типами_undefined_та_null">Використання <code>Object</code> з типами <code>undefined</code> та <code>null</code></h3> + +<p>Наступні приклади зберігають порожній об'єкт <code>Object</code> в <code>o</code>:</p> + +<pre class="brush: js notranslate">var o = new Object(); +</pre> + +<pre class="brush: js notranslate">var o = new Object(undefined); +</pre> + +<pre class="brush: js notranslate">var o = new Object(null); +</pre> + +<h3 id="Використання_Object_для_створення_обєктів_Boolean">Використання <code>Object</code> для створення об'єктів <code>Boolean</code></h3> + +<p>Наступні приклади зберігають об'єкти {{jsxref("Boolean")}} у <code>o</code>:</p> + +<pre class="brush: js notranslate">// еквівалентно до o = new Boolean(true); +var o = new Object(true); +</pre> + +<pre class="brush: js notranslate">// еквівалентно до o = new Boolean(false); +var o = new Object(Boolean()); +</pre> + +<h3 id="Прототипи_обєктів">Прототипи об'єктів</h3> + +<p>Змінюючи поведінку існуючих методів <code>Object.prototype</code>, розгляньте включення коду додаванням вашого розширення до чи після існуючої логіки. Наприклад, цей (неперевірений) код буде попередньо виконувати власну логіку перед тим, як буде виконано вбудовану логіку або інше розширення.</p> + +<p>Коли викликається функція, аргументи виклику містяться у подібній до масиву "змінній" <a href="/uk/docs/Web/JavaScript/Reference/Functions/arguments">arguments</a>. Наприклад, у виклику <code>myFn(a, b, c)</code>, arguments, що знаходиться у тілі <code>myFn</code>, міститиме 3 подібні до масиву елементи, що відповідають <code>(a, b, c)</code>.</p> + +<p>Модифікуючи прототипи з хуками, просто передайте <code>this</code> та arguments (стан виклику) до поточної поведінки, викликавши <code>apply()</code> на функції. Цей шаблон може використовуватись для будь-яких прототипів, наприклад, <code>Node.prototype</code>, <code>Function.prototype</code>, і т. д.</p> + +<pre class="brush: js notranslate">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); + } +}</pre> + +<p>Оскільки JavaScript, насправді, не має об'єктів підкласу, прототип є зручним обхідним рішенням для створення об'єкта у ролі "базового класу" з певними функціями, що діють як об'єкти. Наприклад:</p> + +<pre class="brush: js notranslate">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();</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-object-objects', 'Object')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + +<div class="hidden"> +<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> +</div> + +<p>{{Compat("javascript.builtins.Object")}}</p> + +<h2 id="Дивіться_також">Дивіться також</h2> + +<ul> + <li><a href="/uk/docs/Web/JavaScript/Reference/Operators/Ініціалізація_об’єктів">Ініціалізатор об'єктів</a></li> +</ul> |
