From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../functions/method_definitions/index.html | 219 +++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 files/uk/web/javascript/reference/functions/method_definitions/index.html (limited to 'files/uk/web/javascript/reference/functions/method_definitions') 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 +--- +
{{JsSidebar("Functions")}}
+ +

Починаючи з ECMAScript 2015, з'явився скорочений спосіб визначення методів для обєктів. Який допоможе вам простіше привязати функцію до імя методу обєкта.

+ +
{{EmbedInteractiveExample("pages/js/functions-definitions.html")}}
+ + + +

Синтаксис

+ +
var obj = {
+  property( parameters… ) {},
+  *generator( parameters… ) {},
+  async property( parameters… ) {},
+  async* generator( parameters… ) {},
+
+  // з обчисленими ключами:
+  [property]( parameters… ) {},
+  *[generator]( parameters… ) {},
+  async [property]( parameters… ) {},
+
+  // порівняйте getter/setter синтаксис:
+  get property() {},
+  set property(value) {}
+};
+
+ +

Опис

+ +

Скорочений синтаксис подібний до синтаксису getter і setter оголошенних в ECMAScript 2015.

+ +

Отже, цей код:

+ +
var obj = {
+  foo: function() {
+    /* код */
+  },
+  bar: function() {
+    /* код */
+  }
+};
+
+ +

Ви здатні скоротити до:

+ +
var obj = {
+  foo() {
+    /* код */
+  },
+  bar() {
+    /* код */
+  }
+};
+
+
+ +

Генераторні методи

+ +

Генераторні методи також можуть бути визначенні за допомогою скороченного синтаксису. Користуючить ними:

+ + + +
// Використовуючи названу властивіть
+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
+ +

Async методи

+ +

{{jsxref("Statements/async_function", "Async methods", "", 1)}} також можуть бути визначенні використовуючи скорочення.

+ +
// Використовуючи названу властивіть
+var obj3 = {
+  f: async function () {
+    await some_promise;
+  }
+};
+
+// Ідентичний обєкт використовуючи скорочений синтаксис
+var obj3 = {
+  async f() {
+    await some_promise;
+  }
+};
+
+ +

Async генераторні методи

+ +

Генераторні методи також можуть бути {{jsxref("Statements/async_function", "async", "", 1)}}.

+ +
var obj4 = {
+  f: async function* () {
+    yield 1;
+    yield 2;
+    yield 3;
+  }
+};
+
+// Ідентичний обєкт використовуючи скорочений синтаксис
+var obj4 = {
+  async* f() {
+   yield 1;
+   yield 2;
+   yield 3;
+  }
+};
+ +

Визначенні методи за допомогою скорочення - не є конструкторами

+ +

Любі визначенні методи за допомогою скорочення не є конструктором і викинуть {{jsxref("TypeError")}}, якщо ви попробуєте створити екземпляр обєкту за допомогою них.

+ +
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)
+
+ +

Приклади

+ +

Базові випадки

+ +
var obj = {
+  a: 'foo',
+  b() { return this.a; }
+};
+console.log(obj.b()); // "foo"
+
+ +

Обчисленні імена властивостей

+ +

Скороченний синтаксис також підтримує обчисленні імена властивостей.

+ +
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
+ +

Специфікації

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ES2016', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES2016')}}Changed that generator methods should also not have a [[Construct]] trap and will throw when used with new.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}}
+ +

Підтримка браузерів

+ + + +

{{Compat("javascript.functions.method_definitions")}}

+ +

Дивитися також

+ + -- cgit v1.2.3-54-g00ecf