From 980fe00a74a9ad013b945755415ace2e5429c3c2 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Wed, 27 Oct 2021 02:31:24 +0300 Subject: [RU] Remove notranslate (#2874) --- .../ru/web/javascript/reference/classes/index.html | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'files/ru/web/javascript/reference/classes/index.html') diff --git a/files/ru/web/javascript/reference/classes/index.html b/files/ru/web/javascript/reference/classes/index.html index f8a63e92b2..742cd341ca 100644 --- a/files/ru/web/javascript/reference/classes/index.html +++ b/files/ru/web/javascript/reference/classes/index.html @@ -22,7 +22,7 @@ translation_of: Web/JavaScript/Reference/Classes

Первый способ определения класса — class declaration (объявление класса). Для этого необходимо воспользоваться ключевым словом class и указать имя класса (в примере — «Rectangle»).

-
class Rectangle {
+
class Rectangle {
   constructor(height, width) {
     this.height = height;
     this.width = width;
@@ -33,7 +33,7 @@ translation_of: Web/JavaScript/Reference/Classes
 
 

Разница между объявлением функции (function declaration) и объявлением класса (class declaration) в том, что объявление функции совершает подъём ({{Glossary("Hoisting", "hoisting")}}), в то время как объявление класса — нет. Поэтому вначале необходимо объявить ваш класс и только затем работать с ним, а код же вроде следующего сгенерирует исключение типа {{jsxref("ReferenceError")}}:

-
var p = new Rectangle(); // ReferenceError
+
var p = new Rectangle(); // ReferenceError
 
 class Rectangle {}
@@ -41,7 +41,7 @@ class Rectangle {}

Второй способ определения класса — class expression (выражение класса). Можно создавать именованные и безымянные выражения. В первом случае имя выражения класса находится в локальной области видимости класса и может быть получено через свойства самого класса, а не его экземпляра.

-
// безымянный
+
// безымянный
 var Rectangle = class {
   constructor(height, width) {
     this.height = height;
@@ -84,7 +84,7 @@ console.log(Rectangle.name);
 
 

Смотрите также определение методов.

-
class Rectangle {
+
class Rectangle {
   constructor(height, width) {
     this.height = height;
     this.width = width;
@@ -107,7 +107,7 @@ console.log(square.area); // 100

Ключевое слово static, определяет статический метод или свойства для класса. Статические методы и свойства вызываются без инстанцирования их класса, и не могут быть вызваны у экземпляров (instance) класса. Статические методы, часто используются для создания служебных функций для приложения, в то время как статические свойства полезны для кеширования в рамках класса, фиксированной конфигурации или любых других целей, не связанных с реплецированием данных между экземплярами.

-
class Point {
+
class Point {
   constructor(x, y) {
     this.x = x;
     this.y = y;
@@ -136,7 +136,7 @@ console.log(Point.distance(p1, p2)); // 7.0710678118654755

Когда статический или прототипный метод вызывается без привязки к this объекта (или когда this является типом boolean, string, number, undefined, null), тогда this будет иметь значение undefined внутри вызываемой функции. Автоупаковка не будет произведена. Поведение будет таким же как если бы мы писали код в нестрогом режиме.

-
class Animal {
+
class Animal {
   speak() {
     return this;
   }
@@ -156,7 +156,7 @@ eat(); // undefined

Если мы напишем этот же код используя классы основанные на функциях, тогда произойдёт автоупаковка основанная на значении this, в течение которого функция была вызвана. В строгом режиме автоупаковка не произойдёт - значение this останется прежним.

-
function Animal() { }
+
function Animal() { }
 
 Animal.prototype.speak = function(){
   return this;
@@ -178,7 +178,7 @@ eat(); // глобальный объект (нестрогий режим)Свойства экземпляра должны быть определены в методе класса:

-
class Rectangle {
+
class Rectangle {
   constructor(height, width) {
     this.height = height;
     this.width = width;
@@ -187,7 +187,7 @@ eat(); // глобальный объект (нестрогий режим)Статические (class-side) свойства и свойства прототипа должны быть определены за рамками тела класса:

-
Rectangle.staticWidth = 20;
+
Rectangle.staticWidth = 20;
 Rectangle.prototype.prototypeWidth = 25;
 
@@ -201,7 +201,7 @@ Rectangle.prototype.prototypeWidth = 25;

Используя Javascript синтаксис определения полей, приведённый выше пример может быть изменён следующим образом:

-
class Rectangle {
+
class Rectangle {
   height = 0;
   width;
   constructor(height, width) {
@@ -218,7 +218,7 @@ Rectangle.prototype.prototypeWidth = 25;
 
 

Предыдущий пример может быть изменён следующим образом, используя приватные поля:

-
class Rectangle {
+
class Rectangle {
   #height = 0;
   #width;
   constructor(height, width) {
@@ -241,7 +241,7 @@ Rectangle.prototype.prototypeWidth = 25;
 
 

Ключевое слово extends используется в объявлениях классов и выражениях классов для создания класса, дочернего относительно другого класса.

-
class Animal {
+
class Animal {
   constructor(name) {
     this.name = name;
   }
@@ -268,7 +268,7 @@ d.speak(); // Митци лает

Аналогичным образом можно расширять традиционные, основанные на функциях "классы":

-
function Animal (name) {
+
function Animal (name) {
   this.name = name;
 }
 Animal.prototype.speak = function () {
@@ -288,7 +288,7 @@ d.speak(); // Митци лает
 
 

Обратите внимание, что классы не могут расширять обычные (non-constructible) объекты. Если вам необходимо создать наследование от обычного объекта, в качестве замены можно использовать {{jsxref("Object.setPrototypeOf()")}}:

-
var Animal = {
+
var Animal = {
   speak() {
     console.log(`${this.name} издаёт звук.`);
   }
@@ -312,7 +312,7 @@ d.speak(); // Митци издаёт звук.

Например, при использовании таких методов, как {{jsxref("Array.map", "map()")}}, который возвращает конструктор по умолчанию, вам хотелось бы, чтобы они возвращали родительский объект Array вместо объекта MyArray. Символ {{jsxref("Symbol.species")}} позволяет это реализовать:

-
class MyArray extends Array {
+
class MyArray extends Array {
   // Изменить species на родительский конструктор Array
   static get [Symbol.species]() { return Array; }
 }
@@ -326,7 +326,7 @@ console.log(mapped instanceof Array);   // true

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

-
class Cat {
+
class Cat {
   constructor(name) {
     this.name = name;
   }
@@ -355,7 +355,7 @@ l.speak();
 
 

Для реализации mix-ins в ECMAScript можно использовать функцию, которая в качестве аргумента принимает родительский класс, а возвращает подкласс, его расширяющий:

-
var calculatorMixin = Base => class extends Base {
+
var calculatorMixin = Base => class extends Base {
   calc() { }
 };
 
@@ -365,7 +365,7 @@ var randomizerMixin = Base => class extends Base {
 
 

Класс, использующий такие mix-ins, можно описать следующим образом:

-
class Foo { }
+
class Foo { }
 class Bar extends calculatorMixin(randomizerMixin(Foo)) { }

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

-- cgit v1.2.3-54-g00ecf