diff options
Diffstat (limited to 'files/uk/web/javascript/reference/operators/instanceof')
| -rw-r--r-- | files/uk/web/javascript/reference/operators/instanceof/index.html | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/files/uk/web/javascript/reference/operators/instanceof/index.html b/files/uk/web/javascript/reference/operators/instanceof/index.html deleted file mode 100644 index eca9cdabeb..0000000000 --- a/files/uk/web/javascript/reference/operators/instanceof/index.html +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: instanceof -slug: Web/JavaScript/Reference/Operators/instanceof -tags: - - JavaScript - - Object - - Об'єкт - - Оператор -translation_of: Web/JavaScript/Reference/Operators/instanceof ---- -<div>{{jsSidebar("Operators")}}</div> - -<p><strong>Оператор</strong> <strong><code>instanceof</code></strong> перевіряє, чи присутня властивість конструктора <code>prototype</code> десь у ланцюжку прототипів об'єкта.</p> - -<div>{{EmbedInteractiveExample("pages/js/expressions-instanceof.html")}}</div> - - - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox"><em>object</em> instanceof <em>constructor</em></pre> - -<h3 id="Параметри">Параметри</h3> - -<dl> - <dt><code>object</code></dt> - <dd>Об'єкт, який потрібно перевірити.</dd> -</dl> - -<dl> - <dt><code>constructor</code></dt> - <dd>Функція для перевірки.</dd> -</dl> - -<h2 id="Опис">Опис</h2> - -<p>Оператор <code>instanceof</code> перевіряє присутність <code>constructor.prototype</code> у ланцюжку прототипів об'єкта <code>object</code>.</p> - -<pre class="brush: js">// визначення конструкторів -function C() {} -function D() {} - -var o = new C(); - -// true, тому що: Object.getPrototypeOf(o) === C.prototype -o instanceof C; - -// false, тому що D.prototype немає у ланцюжку прототипів o -o instanceof D; - -o instanceof Object; // true, тому що: -C.prototype instanceof Object // true - -C.prototype = {}; -var o2 = new C(); - -o2 instanceof C; // true - -// false, тому що C.prototype більше немає у -// ланцюжку прототипів o -o instanceof C; - -D.prototype = new C(); // додати C до збірки D [[Prototype]] -var o3 = new D(); -o3 instanceof D; // true -o3 instanceof C; // true, оскільки C.prototype тепер є у ланцюжку прототипів o3 -</pre> - -<p>Зауважте, що значення перевірки <code>instanceof</code> може змінитись на підставі змін у властивості конструкторів <code>prototype</code>, також воно може змінитись через зміну прототипу об'єкта методом <code>Object.setPrototypeOf</code>. Це також можливо зробити використанням нестандартної псевдовластивості <code>__proto__</code>.</p> - -<h3 id="instanceof_та_декілька_контекстів_наприклад_фрейми_чи_вікна"><code>instanceof</code> та декілька контекстів (наприклад, фрейми чи вікна)</h3> - -<p>Різні області видимості мають різні середовища виконання. Це означає, що вони мають різні вбудовані складові (різні глобальні об'єкти, різні конструктори і т. д.). Це може призвести до неочікуваних результатів. Наприклад, <code>[] instanceof window.frames[0].Array</code> поверне <code>false</code>, тому що <code>Array.prototype !== </code><code>window.frames[0].Array</code>, а масиви успадковуються від першого.</p> - -<p>Спочатку це може виглядати дивно, але, коли починаєш мати справу з кількома фреймами або вікнами у скрипті та передавати об'єкти з одного контексту у інший через функції, це є правильним та сильним аспектом. Наприклад, ви можете безпечно перевірити, чи є наданий об'єкт, насправді, масивом, за допомогою <code>Array.isArray(myObj)</code></p> - -<p>Наприклад, перевіряючи, чи <a href="/uk/docs/Web/API/Node">Nodes</a> є <a href="/uk/docs/Web/API/SVGElement">SVGElement</a> у іншому контексті, ви можете використати <code>myNode instanceof myNode.ownerDocument.defaultView.SVGElement</code></p> - -<div class="note"><strong>Примітка для розробників Mozilla:</strong><br> -У коді, що використовує XPCOM, <code>instanceof</code> має особливий ефект: <code>obj instanceof </code><em><code>xpcomInterface</code></em> (наприклад, <code>Components.interfaces.nsIFile</code>) викликає <code>obj.QueryInterface(<em>xpcomInterface</em>)</code> та повертає <code>true</code>, якщо QueryInterface має успішний результат. Побічним ефектом такого виклику є те, що ви можете використовувати властивості <em><code>xpcomInterface</code></em> на <code>obj</code> після успішної перевірки <code>instanceof</code>. На відміну від стандартних глобальних складових JavaScript, перевірка <code>obj instanceof xpcomInterface</code> працює, як очікується, навіть якщо <code>obj</code> з іншої області видимості.</div> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Демострація_того_що_String_та_Date_належать_до_типу_Object_та_виняткові_випадки">Демострація того, що <code>String</code> та <code>Date</code> належать до типу <code>Object</code>, та виняткові випадки</h3> - -<p>Наступний код використовує <code>instanceof</code>, щоб продемонструвати, що об'єкти <code>String</code> та <code>Date</code> також належать до типу <code>Object</code> (вони походять від <code>Object</code>).</p> - -<p>Однак, об'єкти, створені за допомогою нотації об'єктного літералу, є винятком: Хоча прототип дорівнює undefined, <code>instanceof Object</code> вертає <code>true</code>.</p> - -<pre class="brush: js">var simpleStr = 'Це простий рядок'; -var myString = new String(); -var newStr = new String('Рядок, створений конструктором'); -var myDate = new Date(); -var myObj = {}; -var myNonObj = Object.create(null); - -simpleStr instanceof String; // вертає false, перевіряє ланцюжок прототипів, знаходить undefined -myString instanceof String; // вертає true -newStr instanceof String; // вертає true -myString instanceof Object; // вертає true - -myObj instanceof Object; // вертає true, не зважаючи на те, що прототип дорівнює undefined -({}) instanceof Object; // вертає true, те саме, що у попередньому випадку -myNonObj instanceof Object; // вертає false, спосіб створення об'єкту, який не є екземпляром Object - -myString instanceof Date; // вертає false - -myDate instanceof Date; // вертає true -myDate instanceof Object; // вертає true -myDate instanceof String; // вертає false -</pre> - -<h3 id="Демонстрація_того_що_mycar_належить_до_типу_Car_та_до_типу_Object">Демонстрація того, що <code>mycar</code> належить до типу <code>Car</code> та до типу <code>Object</code></h3> - -<p>Наступний код створює тип об'єктів <code>Car</code> та екземпляр цього типу, <code>mycar</code>. Оператор <code>instanceof</code> демонструє, що об'єкт <code>mycar</code> належить до типу <code>Car</code> та до типу <code>Object</code>.</p> - -<pre class="brush: js">function Car(make, model, year) { - this.make = make; - this.model = model; - this.year = year; -} -var mycar = new Car('Honda', 'Accord', 1998); -var a = mycar instanceof Car; // вертає true -var b = mycar instanceof Object; // вертає true -</pre> - -<h3 id="Не_instanceof">Не instanceof</h3> - -<p>Щоб перевірити, що об'єкт не є екземпляром певного Конструктора, ви можете зробити</p> - -<pre class="brush: js">if (!(mycar instanceof Car)) { - // Зробити щось, наприклад, mycar = new Car(mycar) -} -</pre> - -<p>Це, насправді, відрізняється від коду</p> - -<pre class="brush: js">if (!mycar instanceof Car)</pre> - -<p>який завжди дорівнюватиме false (<code>!mycar</code> обчислюється перед <code>instanceof</code>, тому ви завжди перевірятимете, чи є булеве значення екземпляром <code>Car</code>).</p> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Специфікація</th> - <th scope="col">Статус</th> - <th scope="col">Коментар</th> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-relational-operators', 'Relational Operators')}}</td> - <td>{{Spec2('ES6')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-11.8.6', 'The instanceof operator')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES3', '#sec-11.8.6', 'The instanceof operator')}}</td> - <td>{{Spec2('ES3')}}</td> - <td>Початкове визначення. Реалізоване у JavaScript 1.4.</td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - - - -<p>{{Compat("javascript.operators.instanceof")}}</p> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li><code><a href="/uk/docs/Web/JavaScript/Reference/Operators/typeof" title="/en-US/docs/JavaScript/Reference/Operators/typeof">typeof</a></code></li> - <li>{{jsxref("Symbol.hasInstance")}}</li> - <li>{{jsxref("Object.prototype.isPrototypeOf")}}</li> -</ul> |
