aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/functions/method_definitions
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:43:23 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:43:23 -0500
commit218934fa2ed1c702a6d3923d2aa2cc6b43c48684 (patch)
treea9ef8ac1e1b8fe4207b6d64d3841bfb8990b6fd0 /files/uk/web/javascript/reference/functions/method_definitions
parent074785cea106179cb3305637055ab0a009ca74f2 (diff)
downloadtranslated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.gz
translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.bz2
translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.zip
initial commit
Diffstat (limited to 'files/uk/web/javascript/reference/functions/method_definitions')
-rw-r--r--files/uk/web/javascript/reference/functions/method_definitions/index.html219
1 files changed, 219 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/functions/method_definitions/index.html b/files/uk/web/javascript/reference/functions/method_definitions/index.html
new file mode 100644
index 0000000000..3930fff286
--- /dev/null
+++ b/files/uk/web/javascript/reference/functions/method_definitions/index.html
@@ -0,0 +1,219 @@
+---
+title: Method definitions
+slug: Web/JavaScript/Reference/Functions/Method_definitions
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Об'єкт
+ - Синтаксис
+ - Скорочення
+ - функції
+translation_of: Web/JavaScript/Reference/Functions/Method_definitions
+---
+<div>{{JsSidebar("Functions")}}</div>
+
+<p>Починаючи з ECMAScript 2015, з'явився скорочений спосіб визначення методів для обєктів. Який допоможе вам простіше привязати функцію до імя методу обєкта.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/functions-definitions.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">var obj = {
+ <var>property</var>( <var>parameters…</var> ) {},
+ *<var>generator</var>( <var>parameters…</var> ) {},
+ async property( <var>parameters…</var> ) {},
+ async* generator( <var>parameters…</var> ) {},
+
+ // з обчисленими ключами:
+ [property]( <var>parameters…</var> ) {},
+ *[generator]( <var>parameters…</var> ) {},
+ async [property]( <var>parameters…</var> ) {},
+
+ // порівняйте getter/setter синтаксис:
+ get <var>property</var>() {},
+ set <var>property</var>(<var>value</var>) {}
+};
+</pre>
+
+<h2 id="Опис">Опис</h2>
+
+<p>Скорочений синтаксис подібний до синтаксису <a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">getter</a> і <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setter</a> оголошенних в ECMAScript 2015.</p>
+
+<p>Отже, цей код:</p>
+
+<pre class="brush: js notranslate">var obj = {
+ foo: function() {
+ /* код */
+ },
+ bar: function() {
+ /* код */
+ }
+};
+</pre>
+
+<p>Ви здатні скоротити до:</p>
+
+<pre class="brush: js notranslate">var obj = {
+ foo() {
+ /* код */
+ },
+ bar() {
+ /* код */
+ }
+};
+
+</pre>
+
+<h3 id="Генераторні_методи">Генераторні методи</h3>
+
+<p><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function*">Генераторні методи</a> також можуть бути визначенні за допомогою скороченного синтаксису. Користуючить ними:</p>
+
+<ul>
+ <li>зірочка (*)  повинна бути перед іменем генераторного методу. Тобто, <code>* g(){}</code> - це працюватиме, <code>g *(){}</code> - це ні.</li>
+ <li>всі не генераторні визначення методів не можуть використовувати ключове слово <code>yield</code>. Це означає, що <a href="/en-US/docs/Web/JavaScript/Reference/Statements/Legacy_generator_function">застарілі генераторні функції</a> також не працюватимуть і викинуть {{jsxref("SyntaxError")}}. Завжди використовуйте <code>yield</code> разом із зірочкою (*).</li>
+</ul>
+
+<pre class="brush: js;highlight[12] notranslate">// Використовуючи названу властивіть
+var obj2 = {
+ g: function* () {
+ var index = 0;
+ while (true)
+ yield index++;
+ }
+};
+
+// Ідентичний обєкт використовуючи скорочений синтаксис
+var obj2 = {
+ * g() {
+ var index = 0;
+ while (true)
+ yield index++;
+ }
+};
+
+var it = obj2.g();
+console.log(it.next().value); // 0
+console.log(it.next().value); // 1</pre>
+
+<h3 id="Async_методи">Async методи</h3>
+
+<p>{{jsxref("Statements/async_function", "Async methods", "", 1)}} також можуть бути визначенні використовуючи скорочення.</p>
+
+<pre class="brush: js;highlight[12] notranslate">// Використовуючи названу властивіть
+var obj3 = {
+ f: async function () {
+ await some_promise;
+ }
+};
+
+// Ідентичний обєкт використовуючи скорочений синтаксис
+var obj3 = {
+ async f() {
+ await some_promise;
+ }
+};
+</pre>
+
+<h3 id="Async_генераторні_методи">Async генераторні методи</h3>
+
+<p><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function*">Генераторні методи</a> також можуть бути {{jsxref("Statements/async_function", "async", "", 1)}}.</p>
+
+<pre class="brush: js notranslate">var obj4 = {
+ f: async function* () {
+ yield 1;
+ yield 2;
+ yield 3;
+ }
+};
+
+// Ідентичний обєкт використовуючи скорочений синтаксис
+var obj4 = {
+ async* f() {
+ yield 1;
+ yield 2;
+ yield 3;
+ }
+};</pre>
+
+<h3 id="Визначенні_методи_за_допомогою_скорочення_-_не_є_конструкторами">Визначенні методи за допомогою скорочення - не є конструкторами</h3>
+
+<p>Любі визначенні методи за допомогою скорочення не є конструктором і викинуть {{jsxref("TypeError")}}, якщо ви попробуєте створити <span class="tlid-translation translation" lang="uk"><span title="">екземпляр обєкту за допомогою них</span></span>.</p>
+
+<pre class="brush: js example-bad notranslate">var obj = {
+ method() {}
+};
+new obj.method; // TypeError: obj.method is not a constructor
+
+var obj = {
+ * g() {}
+};
+new obj.g; // TypeError: obj.g is not a constructor (changed in ES2016)
+</pre>
+
+<h2 id="Приклади">Приклади</h2>
+
+<h3 id="Базові_випадки">Базові випадки</h3>
+
+<pre class="brush: js;highlight[3] notranslate">var obj = {
+ a: 'foo',
+ b() { return this.a; }
+};
+console.log(obj.b()); // "foo"
+</pre>
+
+<h3 id="Обчисленні_імена_властивостей">Обчисленні імена властивостей</h3>
+
+<p>Скороченний синтаксис також підтримує обчисленні імена властивостей.</p>
+
+<pre class="brush: js;highlight[4] notranslate">var bar = {
+ foo0: function() { return 0; },
+ foo1() { return 1; },
+ ['foo' + 2]() { return 2; }
+};
+
+console.log(bar.foo0()); // 0
+console.log(bar.foo1()); // 1
+console.log(bar.foo2()); // 2</pre>
+
+<h2 id="Специфікації">Специфікації</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-method-definitions', 'Method definitions')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2016', '#sec-method-definitions', 'Method definitions')}}</td>
+ <td>{{Spec2('ES2016')}}</td>
+ <td>Changed that generator methods should also not have a [[Construct]] trap and will throw when used with <code>new</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Підтримка_браузерів">Підтримка браузерів</h2>
+
+
+
+<p>{{Compat("javascript.functions.method_definitions")}}</p>
+
+<h2 id="Дивитися_також"><span class="tlid-translation translation" lang="uk"><span title="">Дивитися також</span></span></h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">get</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">set</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li>
+</ul>