diff options
| author | Ryan Johnson <rjohnson@mozilla.com> | 2021-04-29 16:16:42 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-29 16:16:42 -0700 |
| commit | 95aca4b4d8fa62815d4bd412fff1a364f842814a (patch) | |
| tree | 5e57661720fe9058d5c7db637e764800b50f9060 /files/uk/web/javascript/reference/global_objects/object/constructor | |
| parent | ee3b1c87e3c8e72ca130943eed260ad642246581 (diff) | |
| download | translated-content-95aca4b4d8fa62815d4bd412fff1a364f842814a.tar.gz translated-content-95aca4b4d8fa62815d4bd412fff1a364f842814a.tar.bz2 translated-content-95aca4b4d8fa62815d4bd412fff1a364f842814a.zip | |
remove retired locales (#699)
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/object/constructor')
| -rw-r--r-- | files/uk/web/javascript/reference/global_objects/object/constructor/index.html | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/files/uk/web/javascript/reference/global_objects/object/constructor/index.html b/files/uk/web/javascript/reference/global_objects/object/constructor/index.html deleted file mode 100644 index ef2362cdec..0000000000 --- a/files/uk/web/javascript/reference/global_objects/object/constructor/index.html +++ /dev/null @@ -1,237 +0,0 @@ ---- -title: Object.prototype.constructor -slug: Web/JavaScript/Reference/Global_Objects/Object/constructor -tags: - - JavaScript - - Object - - Властивість - - прототип -translation_of: Web/JavaScript/Reference/Global_Objects/Object/constructor ---- -<div>{{JSRef}}</div> - -<p>Повертає посилання на функцію-конструктор {{jsxref("Object", "об'єкта")}}, що створила екземпляр об'єкта. Зауважте, що значення цієї властивості є посиланням на саму функцію, а не рядком, що містить ім'я функції. Значення, доступне лише для читання, мають лише примітивні значення, як то <code>1</code>, <code>true</code> або <code>"test"</code>.</p> - -<h2 id="Опис">Опис</h2> - -<p>Усі об'єкти (за виключенням об'єктів, створених через <code>Object.create(null)</code>) матимуть властивість <code>constructor</code>. Об'єкти, створені без явного використання функції-конструктора (тобто, об'єктними та масивними літералами), матимуть властивість <code>constructor</code>, що вказує на конструктор фундаментального об'єкта для цього об'єкта.</p> - -<pre class="brush: js">var o = {}; -o.constructor === Object; // true - -var o = new Object; -o.constructor === Object; // true - -var a = []; -a.constructor === Array; // true - -var a = new Array; -a.constructor === Array; // true - -var n = new Number(3); -n.constructor === Number; // true</pre> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Відображення_конструктора_об'єкта">Відображення конструктора об'єкта</h3> - -<p>Наступний приклад створює конструктор <code>Tree</code> та об'єкт цього типу, <code>theTree</code>. Далі приклад демонструє властивість <code>constructor</code> об'єкта <code>theTree</code>.</p> - -<pre class="brush: js">function Tree(name) { - this.name = name; -} - -var theTree = new Tree('Redwood'); -console.log('theTree.constructor дорівнює ' + theTree.constructor); -</pre> - -<p>Цей приклад виведе наступний результат:</p> - -<pre class="brush: js">theTree.constructor дорівнює function Tree(name) { - this.name = name; -} -</pre> - -<h3 id="Зміна_конструктора_об'єкта">Зміна конструктора об'єкта</h3> - -<p>Наступний приклад покаже як можна змінити конструктор загальних об'єктів. Тільки <code>true</code>, <code>1</code> та <code>"test"</code> не зміняться, оскілки їхні конструктори доступні лише для читання. Цей приклад демонструє, що не завжди безпечно покладатися на властивість об'єкта <code>constructor</code>.</p> - -<pre class="brush:js">function Type () {} - -var types = [ - new Array(), - [], - new Boolean(), - true, // лишається незмінним - new Date(), - new Error(), - new Function(), - function () {}, - Math, - new Number(), - 1, // лишається незмінним - new Object(), - {}, - new RegExp(), - /(?:)/, - new String(), - 'test' // лишається незмінним -]; - -for (var i = 0; i < types.length; i++) { - types[i].constructor = Type; - types[i] = [types[i].constructor, types[i] instanceof Type, types[i].toString()]; -} - -console.log(types.join('\n')); -</pre> - -<p>Цей приклад виведе наступний результат (коментарі додані для довідки):</p> - -<pre class="brush: js">function Type() {},false, // new Array() -function Type() {},false, // [] -function Type() {},false,false // new Boolean() -function Boolean() { - [native code] -},false,true // true -function Type() {},false,Mon Sep 01 2014 16:03:49 GMT+0600 // new Date() -function Type() {},false,Error // new Error() -function Type() {},false,function anonymous() { - -} // new Function() -function Type() {},false,function () {} // function () {} -function Type() {},false,[object Math] // Math -function Type() {},false,0 // new Number() -function Number() { - [native code] -},false,1 // 1 -function Type() {},false,[object Object] // new Object() -function Type() {},false,[object Object] // {} -function Type() {},false,/(?:)/ // new Regexp() -function Type() {},false,/(?:)/ // /(?:)/ -function Type() {},false, // new String() -function String() { - [native code] -},false,test</pre> - -<h3 id="Зміна_конструктора_функції">Зміна конструктора функції</h3> - -<p>Переважно ця властивість використовується для визначення функції як <strong>функції-конструктора</strong> з подальшим викликом її з оператором <strong>new</strong> та наслідуванням через ланцюжок прототипів.</p> - -<pre class="brush: js">function Parent() {} -Parent.prototype.parentMethod = function parentMethod() {}; - -function Child() {} -Child.prototype = Object.create(Parent.prototype); // перевизначення дочірнього прототипу на прототип Parent - -Child.prototype.constructor = Child; // повернення початкового конструктора прототипу Child</pre> - -<p>Але коли нам потрібно виконувати цей останній рядок? Нажаль, відповідь - залежить від обставин.</p> - -<p>Спробуємо визначити випадки, коли переприсвоєння початкового конструктора зіграє важливу роль, а коли воно стане додатковим непотрібним рядком коду.</p> - -<p>Візьмемо наступний випадок: об'єкт має метод <strong>create</strong> для створення самого себе.</p> - -<pre class="brush: js">function Parent() {}; -function CreatedConstructor() {} - -CreatedConstructor.prototype = Object.create(Parent.prototype); - -CreatedConstructor.prototype.create = function create() { - return new this.constructor(); -} - -new CreatedConstructor().create().create(); // TypeError undefined is not a function, оскільки constructor === Parent</pre> - -<p>У наведеному вище прикладі виняток виникне тому, що конструктор посилається на Parent.</p> - -<p>Щоб уникнути цього, просто призначте потрібний конструктор, який ви збираєтесь використовувати.</p> - -<pre class="brush: js">function Parent() {}; -function CreatedConstructor() {} - -CreatedConstructor.prototype = Object.create(Parent.prototype); -CreatedConstructor.prototype.constructor = CreatedConstructor; // призначте конструктор, який будете використовувати - -CreatedConstructor.prototype.create = function create() { - return new this.constructor(); -} - -new CreatedConstructor().create().create(); // так непогано</pre> - -<p>Гаразд, тепер зрозуміло, чому зміна конструктора може бути досить корисною.</p> - -<p>Розглянемо інший випадок.</p> - -<pre class="brush: js">function ParentWithStatic() {} - -ParentWithStatic.startPosition = { x: 0, y:0 }; -ParentWithStatic.getStartPosition = function getStartPosition() { - return this.startPosition; -} - -function Child(x, y) { - this.position = { - x: x, - y: y - }; -} - -Child.prototype = Object.create(ParentWithStatic.prototype); -Child.prototype.constructor = Child; - -Child.prototype.getOffsetByInitialPosition = function getOffsetByInitialPosition() { - var position = this.position; - var startPosition = this.constructor.getStartPosition(); // error undefined is not a function, оскільки конструктор - Child - - return { - offsetX: startPosition.x - position.x, - offsetY: startPosition.y - position.y - } -};</pre> - -<p>В цьому прикладі нам треба залишити батьківський конструктор, щоб все працювало як слід.</p> - -<p><strong>Висновок</strong>: ручна зміна або встановлення конструктора може призвести до різноманітних та іноді заплутаних наслідків. Щоб запобігти цьому, визначте роль конструктора у кожному конкретному випадку. В більшості випадків конструктор не використовується, і в перепризначенні немає необхідності.</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-object.prototype.constructor', 'Object.prototype.constructor')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}</td> - <td>{{Spec2('ES6')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-15.2.4.1', 'Object.prototype.constructor')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES1')}}</td> - <td>{{Spec2('ES1')}}</td> - <td>Початкове визначення. Реалізоване у JavaScript 1.1.</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.constructor")}}</p> - -<div id="compat-mobile"></div> |
