From 841aae260382e2bf5ebb44d765d8c7301d27caab Mon Sep 17 00:00:00 2001
From: Alexey Istomin Однако, если определен ваш собственный конструктор и ваш класс является производным от какого-либо родительского класса, то вы должны явно объявить конструктор родительского класса, используя Однако, если определён ваш собственный конструктор и ваш класс является производным от какого-либо родительского класса, то вы должны явно объявить конструктор родительского класса, используя Здесь прототип Square класса изменен, но в то же время constructor предыдущего базового класса Polygon вызывается при создании нового экземпляра Square. Здесь прототип Square класса изменён, но в то же время constructor предыдущего базового класса Polygon вызывается при создании нового экземпляра Square. {{Compat("javascript.classes.constructor")}} Тело класса — это часть кода, заключенная в фигурные скобки Тело класса — это часть кода, заключённая в фигурные скобки Если мы напишем этот же код используя классы основанные на функциях, тогда произойдет автоупаковка основанная на значении this, в течение которого функция была вызвана. В строгом режиме автоупаковка не произойдет - значение this останется прежним. Если мы напишем этот же код используя классы основанные на функциях, тогда произойдёт автоупаковка основанная на значении this, в течение которого функция была вызвана. В строгом режиме автоупаковка не произойдёт - значение this останется прежним. Используя Javascript синтаксис определения полей, приведенный выше пример может быть изменен следующим образом: Используя Javascript синтаксис определения полей, приведённый выше пример может быть изменён следующим образом: Предыдущий пример может быть изменен следующим образом, используя приватные поля: Предыдущий пример может быть изменён следующим образом, используя приватные поля: Приватные поля могут быть объявлены только заранее в объявлении поля. Приватные поля не могут быть созданы позже путем присваивания им значения, в отличии от обычных свойств. Приватные поля не могут быть созданы позже путём присваивания им значения, в отличии от обычных свойств. Более подробно об этом написано в Приватные поля класса. Класс не может быть переопределен. Попытка этого приведет к Класс не может быть переопределён. Попытка этого приведёт к Если мы запускаете код в веб браузере, к примеру в Firefox Web Console (Tools > Web Developer > Web Console) и вы используете ('Run') определение класса с одним и тем же именем дважды, вы получите Приватные поля доступны в конструкторе класса изнутри самой декларации класса. Ограничение статических переменных, вызываемых только статическими методами, все еще сохраняется. Ограничение статических переменных, вызываемых только статическими методами, все ещё сохраняется. Приватные методы экземпляров это методы, доступные у экземпляров класса, доступ к которым запрещен также, как у приватных полей класса. Приватные методы экземпляров это методы, доступные у экземпляров класса, доступ к которым запрещён также, как у приватных полей класса. Внутри методов экземпляра, ValidationError классу не нужен явный (explicit) конструктор, потому что не требуется инициализация. Затем конструктор по умолчанию позаботится о инициализации родительского класса Error переданным ему аргументом.super. К примеру:super. К примеру:class ValidationError extends Error {
@@ -109,7 +109,7 @@ try {
class Square extends Polygon {
constructor(length) {
// Здесь вызывается конструктор родительского класса,
- // в который передается length в качестве аргументов,
+ // в который передаётся length в качестве аргументов,
// соответствующим полям width и height класса Polygon
super(length, length);
// Заметка: В производном классе, super() должен вызываться перед тем как
@@ -152,7 +152,7 @@ console.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //
let newInstance = new Square();
console.log(newInstance.name); //Polygon
-Constructors по умолчанию.
@@ -190,7 +190,7 @@ console.log(newInstance.name); //PolygonСовместимость с браузерами
-class Square extends Polygon {
constructor(length) {
// Здесь вызывается конструктор родительского класса,
- // в который передается свойство length в качестве
+ // в который передаётся свойство length в качестве
// аргументов, соответствующих полям width и height,
// класса Polygon
super(length, length);
diff --git a/files/ru/web/javascript/reference/classes/index.html b/files/ru/web/javascript/reference/classes/index.html
index 8711331ffc..8b64f585f0 100644
--- a/files/ru/web/javascript/reference/classes/index.html
+++ b/files/ru/web/javascript/reference/classes/index.html
@@ -68,7 +68,7 @@ console.log(Rectangle.name);
-Тело класса и задание методов
-{}. Здесь вы можете объявлять члены класса, такие как методы и конструктор.{}. Здесь вы можете объявлять члены класса, такие как методы и конструктор.Строгий режим
@@ -154,7 +154,7 @@ Animal.eat() // класс Animal
let eat = Animal.eat;
eat(); // undefined
this.name = name;
}
Animal.prototype.speak = function () {
- console.log(`${this.name} издает звук.`function Animal() { }
@@ -199,7 +199,7 @@ Rectangle.prototype.prototypeWidth = 25;
speak() {
- console.log(`${this.name} издает звук.`);
+ console.log(`${this.name} издаёт звук.`);
}
}
class Dog extends Animal {
constructor(name) {
- super(name); // вызывает конструктор super класса и передает параметр name
+ super(name); // вызывает конструктор super класса и передаёт параметр name
}
speak() {
@@ -272,7 +272,7 @@ d.speak(); // Митци лаетПубличные поля
-class Rectangle {
height = 0;
@@ -216,7 +216,7 @@ Rectangle.prototype.prototypeWidth = 25;
Приватные поля
-class Rectangle {
#height = 0;
@@ -233,7 +233,7 @@ Rectangle.prototype.prototypeWidth = 25;
);
+ console.log(`${this.name} издаёт звук.`);
}
class Dog extends Animal {
@@ -290,7 +290,7 @@ d.speak(); // Митци лает
+d.speak(); // Митци издаёт звук.var Animal = {
speak() {
- console.log(`${this.name} издает звук.`);
+ console.log(`${this.name} издаёт звук.`);
}
};
@@ -304,7 +304,7 @@ class Dog {
Object.setPrototypeOf(Dog.prototype, Animal);
let d = new Dog('Митци');
-d.speak(); // Митци издает звук.Species
@@ -332,7 +332,7 @@ console.log(mapped instanceof Array); // true
}
speak() {
- console.log(`${this.name} издает звук.`);
+ console.log(`${this.name} издаёт звук.`);
}
}
@@ -345,7 +345,7 @@ class Lion extends Cat {
let l = new Lion('Фаззи');
l.speak();
-// Фаззи издает звук.
+// Фаззи издаёт звук.
// Фаззи рычит.
@@ -396,7 +396,7 @@ class Bar extends calculatorMixin(randomizerMixin(Foo)) { }
Повторное определение класа
-SyntaxError .SyntaxError .SyntaxError: redeclaration of let ClassName;. (Обсуждение по ошибке можно посмотреть в {{Bug(1428672)}}.) Chrome Developer Tools возвращает сообщение типа Uncaught SyntaxError: Identifier 'ClassName' has already been declared at <anonymous>:1:1.class ClassWithPrivateStaticField {
static #PRIVATE_STATIC_FIELD
@@ -139,7 +139,7 @@ console.log(Derived.publicStaticMethod2()); // TypeError
Приватные методы экземпляров(instance)
-class ClassWithPrivateMethod {
#privateMethod() {
diff --git a/files/ru/web/javascript/reference/classes/public_class_fields/index.html b/files/ru/web/javascript/reference/classes/public_class_fields/index.html
index ea67222e50..b32dc3d2fc 100644
--- a/files/ru/web/javascript/reference/classes/public_class_fields/index.html
+++ b/files/ru/web/javascript/reference/classes/public_class_fields/index.html
@@ -172,7 +172,7 @@ console.log(instance.publicMethod());
}
this ссылается на сам экземпляр.
- В классах наследниках, super дает доступ к прототипу базового класса, позволяя вызывать его методы.super даёт доступ к прототипу базового класса, позволяя вызывать его методы.
class BaseClass {
msg = 'hello world';
diff --git a/files/ru/web/javascript/reference/classes/static/index.html b/files/ru/web/javascript/reference/classes/static/index.html
index 58ea5996c1..f97c9db2f3 100644
--- a/files/ru/web/javascript/reference/classes/static/index.html
+++ b/files/ru/web/javascript/reference/classes/static/index.html
@@ -116,7 +116,7 @@ console.log(tp.triple());
Поддержка в браузерах
-Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад в данные, ознакомьтесь с https://github.com/mdn/browser-compat-data и отправить нам запрос на слияние.
+Таблица совместимости на этой странице создаётся из структурированных данных. Если вы хотите внести свой вклад в данные, ознакомьтесь с https://github.com/mdn/browser-compat-data и отправить нам запрос на слияние.
{{Compat("javascript.classes.static")}}
--
cgit v1.2.3-54-g00ecf