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 ---
Ключевое слово 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")}}
- - -super()
does not yet work as expected for built-in prototypes.