From 8fc385b9d14a354cb1704acf2ac3945353b17070 Mon Sep 17 00:00:00 2001 From: Yana Klose-Ivanova <75987641+captainspring@users.noreply.github.com> Date: Fri, 23 Apr 2021 09:12:03 +0300 Subject: Update ru-translation of super keyword (#580) * Updates translation Also fixes #576 * Applies suggestions from code review Co-authored-by: Maxim Postautov <54762420+mpstv@users.noreply.github.com> * Fixes a few typos and stray punctuation marks Co-authored-by: Maxim Postautov <54762420+mpstv@users.noreply.github.com> --- .../reference/operators/super/index.html | 116 +++++++++------------ 1 file changed, 51 insertions(+), 65 deletions(-) (limited to 'files/ru/web/javascript/reference') diff --git a/files/ru/web/javascript/reference/operators/super/index.html b/files/ru/web/javascript/reference/operators/super/index.html index 309aa7f126..0a2a74c468 100644 --- a/files/ru/web/javascript/reference/operators/super/index.html +++ b/files/ru/web/javascript/reference/operators/super/index.html @@ -5,17 +5,20 @@ tags: - ECMAScript 2015 - JavaScript - Классы + - Возможности языка + - Левая часть выражения + - Оператор translation_of: Web/JavaScript/Reference/Operators/super ---
{{jsSidebar("Operators")}}

Ключевое слово super используется для вызова функций, принадлежащих родителю объекта.

-

Выражения: super.prop и super[expr] - действительны в любом методе определения в обоих классах и в литералах объекта.

+

Выражения super.prop и super[expr] действительны в любом определении метода в классах и в литералах объекта.

Синтаксис

-
super([arguments]); // вызов родительского конструктора.
+
super([arguments]); // вызов родительского конструктора.
 super.functionOnParent([arguments]);
 
@@ -27,65 +30,62 @@ super.functionOnParent([arguments]);

Использование super в классах

-

Этот фрагмент кода взят из classes sample (live demo). В этом примере super() вызывается , чтобы предотвратить использования одинакового для классов Rectangle and Square определения тела конструктора.

+

Этот фрагмент кода взят из classes sample (демонстрация). В этом примере super() вызывается, чтобы не повторять части конструктора, одинаковые для классов Rectangle и Square.

-
class Polygon {
+
class Rectangle {
   constructor(height, width) {
-    this.name = 'Polygon';
+    this.name = 'Rectangle';
     this.height = height;
     this.width = width;
   }
   sayName() {
     console.log('Hi, I am a ', this.name + '.');
   }
+  get area() {
+    return this.height * this.width;
+  }
+  set area(value) {
+    this._area = value;
+  }
 }
 
-class Square extends Polygon {
+class Square extends Rectangle {
   constructor(length) {
     this.height; // ReferenceError, super должен быть вызван первым!
 
-    // Здесь, вызывается метод конструктора родительского класса с длинами,
-    // указанными для ширины и высоты класса Polygon
+    // Здесь вызывается конструктор родительского класса с длинами,
+    // указанными для ширины и высоты класса Rectangle
     super(length, length);
 
-    // Примечание: в производных классах, super() необходимо вызывать прежде чем
-    // использовать 'this'. Если этого не сделать будет сообщение об ошибке ссылки.
+    // Примечание: в производных классах super() необходимо вызывать, прежде чем
+    // использовать 'this'. Если этого не сделать, произойдет ошибка ReferenceError.
     this.name = 'Square';
   }
-
-  get area() {
-    return this.height * this.width;
-  }
-
-  set area(value) {
-    this.area = value;
-  }
 }
-

Супер-вызовы статических методов

+

Вызов статических методов через super

-

Вы так же можете вызывать super на статических методах.

+

Вы также можете вызывать super для статических методов.

-
class Rectangle {
-  constructor() {}
+
class Rectangle {
   static logNbSides() {
-    return 'У меня 4 стороны,';
+    return 'У меня 4 стороны';
   }
 }
 
 class Square extends Rectangle {
-  constructor() {}
   static logDescription() {
-    return super.logNbSides() + ' которые все равны';
+    return super.logNbSides() + ', равные между собой';
   }
 }
-Square.logDescription(); // 'У меня 4 стороны, которые все равны'
+Square.logDescription(); // 'У меня 4 стороны, равные между собой' +
-

Удаление свойств super вызывает ошибку

+

Удаление свойств через super вызывает ошибку

-

Вы не можете использовать delete operator и super.prop или super[expr] при удалении родительского класса он выдаст:{{jsxref("ReferenceError")}}.

+

Вы не можете использовать оператор delete и super.prop или super[expr] для удаления свойств родительского класса, он выдаст: {{jsxref("ReferenceError")}}.

-
class Base {
+
class Base {
   constructor() {}
   foo() {}
 }
@@ -102,7 +102,7 @@ new Derived().delete(); // ReferenceError: invalid delete involving 'super'. 

При определении незаписываемых свойств с помощью, например, {{jsxref("Object.defineProperty")}}, super не может перезаписать значение свойства.

-
class X {
+
class X {
   constructor() {
     Object.defineProperty(this, 'prop', {
       configurable: true,
@@ -117,70 +117,56 @@ class Y extends X {
     super();
   }
   foo() {
-    super.prop = 2;   // Не возможно перезаписать значение.
+    super.prop = 2;   // Невозможно перезаписать значение.
   }
 }
 
 var y = new Y();
 y.foo(); // TypeError: "prop" доступен только для чтения
-console.log(y.prop); // 1
+console.log(y.prop); // 1 +

Использование super.prop в объектных литералах

-

Super также можно использовать в объекте инициализатора / литерала. В этом примере, два объекта определяют метод. Во втором объекте, super вызывает первый метод объекта. Это работает с помощью {{jsxref("Object.setPrototypeOf()")}}, с которой мы можем установить прототип для obj2 в obj1, так что super может найти method1 в obj1.

+

Super также можно использовать в объекте инициализатора / литерала. В этом примере метод определяют два объекта. Во втором объекте super вызывает метод первого объекта. Это работает благодаря {{jsxref("Object.setPrototypeOf()")}}, с помощью которого мы можем установить прототип для obj2 в obj1, так что super может найти method1 в obj1.

-
var obj1 = {
+
var obj1 = {
   method1() {
-    console.log("method 1");
+    console.log('method 1');
   }
 }
 
 var obj2 = {
   method2() {
-   super.method1();
+    super.method1();
   }
 }
 
 Object.setPrototypeOf(obj2, obj1);
-obj2.method2(); // logs "method 1"
+obj2.method2(); // выведет "method 1"
 
-

Характеристики

+

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

- - - - - - - - - - - - - - - - - + + + + + + + + + +
ХарактеристикиСтатусКомментарий
{{SpecName('ES6', '#sec-super-keyword', 'super')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-super-keyword', 'super')}}{{Spec2('ESDraft')}}
Спецификация
{{SpecName('ESDraft', '#sec-super-keyword', 'super')}}
-

Совместимость в браузерах

+

Поддержка браузерами

{{Compat("javascript.operators.super")}}

-
- -

Gecko specific notes

- -
    -
  • super() does not yet work as expected for built-in prototypes.
  • -
-

Смотрите также

-- cgit v1.2.3-54-g00ecf