0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Что это</a></li>
1
<ul><li><a>Что это</a></li>
2
<li><a>Определение в коде</a><ul><li><a>Инициализация</a></li>
2
<li><a>Определение в коде</a><ul><li><a>Инициализация</a></li>
3
</ul></li>
3
</ul></li>
4
<li><a>Поля</a><ul><li><a>Приватные поля</a></li>
4
<li><a>Поля</a><ul><li><a>Приватные поля</a></li>
5
<li><a>Публичные поля</a></li>
5
<li><a>Публичные поля</a></li>
6
</ul></li>
6
</ul></li>
7
<li><a>Методы</a><ul><li><a>Методы экземпляра</a><ul><li><a>Геттер и сеттер</a></li>
7
<li><a>Методы</a><ul><li><a>Методы экземпляра</a><ul><li><a>Геттер и сеттер</a></li>
8
</ul></li>
8
</ul></li>
9
<li><a>Статичные методы</a></li>
9
<li><a>Статичные методы</a></li>
10
</ul></li>
10
</ul></li>
11
<li><a>Наследование</a><ul><li><a>Родитель: конструктор и класс</a></li>
11
<li><a>Наследование</a><ul><li><a>Родитель: конструктор и класс</a></li>
12
</ul></li>
12
</ul></li>
13
</ul><p>JavaScript - удобный и очень популярный язык программирования. Он ориентирован преимущественно на веб-разработку. Базируется на создании программного обеспечения с использованием сценариев (скриптов).</p>
13
</ul><p>JavaScript - удобный и очень популярный язык программирования. Он ориентирован преимущественно на веб-разработку. Базируется на создании программного обеспечения с использованием сценариев (скриптов).</p>
14
<p>Среди пользователей, которые только начинают погружение в создание софта, является достаточно распространенным языком. Java Script выделяется простым и понятным синтаксисом, высокой читаемостью исходного кода, функциональностью.</p>
14
<p>Среди пользователей, которые только начинают погружение в создание софта, является достаточно распространенным языком. Java Script выделяется простым и понятным синтаксисом, высокой читаемостью исходного кода, функциональностью.</p>
15
<p>Для того, чтобы можно было создавать качественное ПО на JS, нужно изучить некоторые ключевые функции и возможности ЯП. Пример - классы и его элементы. В данной статье речь зайдет именно о них.</p>
15
<p>Для того, чтобы можно было создавать качественное ПО на JS, нужно изучить некоторые ключевые функции и возможности ЯП. Пример - классы и его элементы. В данной статье речь зайдет именно о них.</p>
16
<h2>Что это</h2>
16
<h2>Что это</h2>
17
<p>В JS классы несколько отличаются от "общепринятых" понятий в объектно-ориентированном программировании. Здесь реализация соответствующих элементов отсутствует.</p>
17
<p>В JS классы несколько отличаются от "общепринятых" понятий в объектно-ориентированном программировании. Здесь реализация соответствующих элементов отсутствует.</p>
18
<p>Класс в JavaScript:</p>
18
<p>Класс в JavaScript:</p>
19
<ul><li>абстракция;</li>
19
<ul><li>абстракция;</li>
20
<li>надстройка над прототипным наследованием, которая имитирует класс;</li>
20
<li>надстройка над прототипным наследованием, которая имитирует класс;</li>
21
<li>функция.</li>
21
<li>функция.</li>
22
</ul><p>С ES2015 работать с соответствующими компонентами в JS стало намного проще, так как он добавил специальное ключевое слово, отвечающее за вызов интересующей функции. Речь идет о синтаксическом сахаре над прототипным наследованием.</p>
22
</ul><p>С ES2015 работать с соответствующими компонентами в JS стало намного проще, так как он добавил специальное ключевое слово, отвечающее за вызов интересующей функции. Речь идет о синтаксическом сахаре над прототипным наследованием.</p>
23
<h2>Определение в коде</h2>
23
<h2>Определение в коде</h2>
24
<p>Добавить класс в программный код позволяет специальное ключевое слово. Речь идет о "class" (без кавычек). Оно добавляет новый класс. После ключевого слова необходимо задать имя соответствующего элемента кода. Далее - открыть фигурные скобки. Они отвечают за определение тела класса.</p>
24
<p>Добавить класс в программный код позволяет специальное ключевое слово. Речь идет о "class" (без кавычек). Оно добавляет новый класс. После ключевого слова необходимо задать имя соответствующего элемента кода. Далее - открыть фигурные скобки. Они отвечают за определение тела класса.</p>
25
<p>Указывать название класса не обязательно. Через его выражение можно назначить рассматриваемых элемент переменной или провести экспорт в качестве части модуля ES2015.</p>
25
<p>Указывать название класса не обязательно. Через его выражение можно назначить рассматриваемых элемент переменной или провести экспорт в качестве части модуля ES2015.</p>
26
<p>Класс становится полезным тогда, когда программист создает экземпляр класса. Это - объект, содержащий информацию и поведение, описанные при помощи соответствующих classes. Для создания экземпляра класса нужно использовать оператор new.</p>
26
<p>Класс становится полезным тогда, когда программист создает экземпляр класса. Это - объект, содержащий информацию и поведение, описанные при помощи соответствующих classes. Для создания экземпляра класса нужно использовать оператор new.</p>
27
<h3>Инициализация</h3>
27
<h3>Инициализация</h3>
28
<p>При инициализации экземпляра класса будет срабатывать специальная функция. Она носит название "constructor". Ее добавление происходит непосредственно в классе. Это - специальный метод, отвечающий за инициализацию classes. Тут можно устанавливать изначальные значения для полей, а также выполнять любые настройки элементов (объектов).</p>
28
<p>При инициализации экземпляра класса будет срабатывать специальная функция. Она носит название "constructor". Ее добавление происходит непосредственно в классе. Это - специальный метод, отвечающий за инициализацию classes. Тут можно устанавливать изначальные значения для полей, а также выполнять любые настройки элементов (объектов).</p>
29
<p>Здесь:</p>
29
<p>Здесь:</p>
30
<ol><li>Функция-конструктор принимает аргумент name.</li>
30
<ol><li>Функция-конструктор принимает аргумент name.</li>
31
<li>Name используется для определения свойства name в классе.</li>
31
<li>Name используется для определения свойства name в классе.</li>
32
<li>Аргумент необходимо передать при создании экземпляра класса:</li>
32
<li>Аргумент необходимо передать при создании экземпляра класса:</li>
33
<li>Внутри конструктора происходит ссылка на новый экземпляр.</li>
33
<li>Внутри конструктора происходит ссылка на новый экземпляр.</li>
34
</ol><p>Если конструктор в рассматриваемом элементе кода не описывается, функция constructor все равно будет создана. Она окажется пустой.</p>
34
</ol><p>Если конструктор в рассматриваемом элементе кода не описывается, функция constructor все равно будет создана. Она окажется пустой.</p>
35
<h2>Поля</h2>
35
<h2>Поля</h2>
36
<p>Добавить в код класс - не самая трудная задача для программиста в JS. Это базовый навык, который должен освоить каждый. Из-за того, что экземпляр class в JS - это объект, то у него есть свойства. Они носят название полей.</p>
36
<p>Добавить в код класс - не самая трудная задача для программиста в JS. Это базовый навык, который должен освоить каждый. Из-за того, что экземпляр class в JS - это объект, то у него есть свойства. Они носят название полей.</p>
37
<p>В рассматриваемом элементе кода можно увидеть несколько типов полей:</p>
37
<p>В рассматриваемом элементе кода можно увидеть несколько типов полей:</p>
38
<ul><li>экземпляра;</li>
38
<ul><li>экземпляра;</li>
39
<li>самого класса.</li>
39
<li>самого класса.</li>
40
</ul><p>Каждый из них бывает публичным и приватным. Первый доступен в пределах всего исходного кода, второй - внутри class, в котором он определен.</p>
40
</ul><p>Каждый из них бывает публичным и приватным. Первый доступен в пределах всего исходного кода, второй - внутри class, в котором он определен.</p>
41
<h3>Приватные поля</h3>
41
<h3>Приватные поля</h3>
42
<p>Доступ к публичным полям экземпляра предоставляется в теле класса. Чтобы добавить "приватность", нужно перед именем поля поставить символ "решетка" (#):</p>
42
<p>Доступ к публичным полям экземпляра предоставляется в теле класса. Чтобы добавить "приватность", нужно перед именем поля поставить символ "решетка" (#):</p>
43
<p>Тут приватное поле - name. У метода getName в теле рассматриваемого элемента есть доступ к нему. А вот напрямую воспользоваться им не получится.</p>
43
<p>Тут приватное поле - name. У метода getName в теле рассматриваемого элемента есть доступ к нему. А вот напрямую воспользоваться им не получится.</p>
44
<p>Если пользователю необходимо задать статичное приватное поле (которое относится к самому class), сделать это можно при помощи ранее предложенного примера:</p>
44
<p>Если пользователю необходимо задать статичное приватное поле (которое относится к самому class), сделать это можно при помощи ранее предложенного примера:</p>
45
<h3>Публичные поля</h3>
45
<h3>Публичные поля</h3>
46
<p>Это - самый распространенный элемент кода. Доступ к нему предоставляется по всему исходному коду:</p>
46
<p>Это - самый распространенный элемент кода. Доступ к нему предоставляется по всему исходному коду:</p>
47
<p>Комментарии тут можно дать следующие:</p>
47
<p>Комментарии тут можно дать следующие:</p>
48
<ol><li>Name - это публичное поле экземпляра.</li>
48
<ol><li>Name - это публичное поле экземпляра.</li>
49
<li>Для того, чтобы было удобнее работать с рассматриваемым элементом, можно декларировать поля не в конструкторе, а в теле classes.</li>
49
<li>Для того, чтобы было удобнее работать с рассматриваемым элементом, можно декларировать поля не в конструкторе, а в теле classes.</li>
50
<li>Декларация в теле особо удобна, если нужно присвоить свойствам дефолтные значения. Это ситуация, при которой передача аргументов в конструктор не является обязательной.</li>
50
<li>Декларация в теле особо удобна, если нужно присвоить свойствам дефолтные значения. Это ситуация, при которой передача аргументов в конструктор не является обязательной.</li>
51
</ol><p>Статичные поля (classes) - свойства, принадлежащие самому классу. Данный момент удобен, если нужно сохранять константы или информацию, актуальную для всех без исключения элементов class.</p>
51
</ol><p>Статичные поля (classes) - свойства, принадлежащие самому классу. Данный момент удобен, если нужно сохранять константы или информацию, актуальную для всех без исключения элементов class.</p>
52
<p>Здесь публичных переменных две - TYPE_ADMIN и TYPE_REGULAR. Так как строки кода указывают на статичность и принадлежность к рассматриваемому "главному" элементу, для обращения к ним нужно использовать имя User.Type_Admin. Если попытаться обратиться через экземпляр, код возвращает undefined.</p>
52
<p>Здесь публичных переменных две - TYPE_ADMIN и TYPE_REGULAR. Так как строки кода указывают на статичность и принадлежность к рассматриваемому "главному" элементу, для обращения к ним нужно использовать имя User.Type_Admin. Если попытаться обратиться через экземпляр, код возвращает undefined.</p>
53
<h2>Методы</h2>
53
<h2>Методы</h2>
54
<p>Добавить классы в код - не самая трудная задача. Она требует хранения информации, которая будет использоваться приложением. На помощь приходят методы. Это - функции, которые выполняют те или иные операции с имеющимися данными. Могут быть как "экземплярными", так и статичными.</p>
54
<p>Добавить классы в код - не самая трудная задача. Она требует хранения информации, которая будет использоваться приложением. На помощь приходят методы. Это - функции, которые выполняют те или иные операции с имеющимися данными. Могут быть как "экземплярными", так и статичными.</p>
55
<h3>Методы экземпляра</h3>
55
<h3>Методы экземпляра</h3>
56
<p>Они имеют доступ к данным класса. Могут вызывать другие методы:</p>
56
<p>Они имеют доступ к данным класса. Могут вызывать другие методы:</p>
57
<p>Здесь есть класс User. У него - метод getName. Как и в функции constructor this внутри метода ссылается на созданный "элемент" classes. А вот метод, который вызывает "себеподобный":</p>
57
<p>Здесь есть класс User. У него - метод getName. Как и в функции constructor this внутри метода ссылается на созданный "элемент" classes. А вот метод, который вызывает "себеподобный":</p>
58
<p>Методы, как и поля, бывают приватными.</p>
58
<p>Методы, как и поля, бывают приватными.</p>
59
<h4><em>Геттер и сеттер</em></h4>
59
<h4><em>Геттер и сеттер</em></h4>
60
<p>Геттеры и сеттеры - специальные методы, срабатывающие автоматически при обращении к полям для получения или корректировки имеющихся значений. Они имитируют обычное поле, но с большим контролем доступа:</p>
60
<p>Геттеры и сеттеры - специальные методы, срабатывающие автоматически при обращении к полям для получения или корректировки имеющихся значений. Они имитируют обычное поле, но с большим контролем доступа:</p>
61
<ul><li>getter - выполняется, когда происходит попытка получения значения полей;</li>
61
<ul><li>getter - выполняется, когда происходит попытка получения значения полей;</li>
62
<li>setter - работает при установлении значения.</li>
62
<li>setter - работает при установлении значения.</li>
63
</ul><p>Выше - пример проверки на факт того, что name не является пустым элементом программного кода.</p>
63
</ul><p>Выше - пример проверки на факт того, что name не является пустым элементом программного кода.</p>
64
<h3>Статичные методы</h3>
64
<h3>Статичные методы</h3>
65
<p>Относятся непосредственно к классу. В них должна просматриваться логика, актуальная для всех будущих экземпляров. Необходимо помнить следующие принципы:</p>
65
<p>Относятся непосредственно к классу. В них должна просматриваться логика, актуальная для всех будущих экземпляров. Необходимо помнить следующие принципы:</p>
66
<ul><li>статичные методы обладают доступом к статичным полям;</li>
66
<ul><li>статичные методы обладают доступом к статичным полям;</li>
67
<li>не имеют доступа к полям экземпляра.</li>
67
<li>не имеют доступа к полям экземпляра.</li>
68
</ul><p>Встречаются как "публичные", так и приватные вариации. Составляются точно так же, как и при работе со статичными приватными свойствами.</p>
68
</ul><p>Встречаются как "публичные", так и приватные вариации. Составляются точно так же, как и при работе со статичными приватными свойствами.</p>
69
<h2>Наследование</h2>
69
<h2>Наследование</h2>
70
<p>Еще один важный элемент написания программы - это наследование. Задается в JS при помощи ключевого слова extends. Надпись class Child extend Parent указывает на то, что элемент Child выступает наследником от class Parent. Происходит передача функции-конструктора, полей, методов.</p>
70
<p>Еще один важный элемент написания программы - это наследование. Задается в JS при помощи ключевого слова extends. Надпись class Child extend Parent указывает на то, что элемент Child выступает наследником от class Parent. Происходит передача функции-конструктора, полей, методов.</p>
71
<p>Здесь Admin унаследовал функцию-конструктор, метод getName() и поле name. У него имеется и собственный элемент status, выступающий в качестве свойства.</p>
71
<p>Здесь Admin унаследовал функцию-конструктор, метод getName() и поле name. У него имеется и собственный элемент status, выступающий в качестве свойства.</p>
72
<h3>Родитель: конструктор и класс</h3>
72
<h3>Родитель: конструктор и класс</h3>
73
<p>Если добавить в код класс наследник, то для инициализации потребуется вызвать функцию super(). Она отвечает за вызов конструктора класса-родителя.</p>
73
<p>Если добавить в код класс наследник, то для инициализации потребуется вызвать функцию super(). Она отвечает за вызов конструктора класса-родителя.</p>
74
<p>Также в JS дочерние classes могут использовать ключевое слово super. Оно дает возможность вызова метода родителя:</p>
74
<p>Также в JS дочерние classes могут использовать ключевое слово super. Оно дает возможность вызова метода родителя:</p>
75
<p>Выше - пример того, как это выглядит в редакторе. Есть class User, а у него метод - renderProperties. Последний получает в виде аргумента элемент Node-дерева, а потом рендерит в него все поля. Наследник выглядит в этом случае так.</p>
75
<p>Выше - пример того, как это выглядит в редакторе. Есть class User, а у него метод - renderProperties. Последний получает в виде аргумента элемент Node-дерева, а потом рендерит в него все поля. Наследник выглядит в этом случае так.</p>
76
<a></a>
76
<a></a>