** Наследование классов, поля (общедоступные и частные)
Наследование классов
Родительский класс и Дочерний класс имеют общие свойства и методы. Наследование позволяет дочерним классам наследовать свойства и методы родительского класса. Также можно добавить свойства или методы, которых нет в родительском классе.
- super: вызвать родительский класс (сохранить родительские свойства) — необходимо использовать «super» в «конструкторе», иначе будет создана «ошибка ссылки».
- extends: переносит все методы Parent в дочерний класс
- переопределение: не брать «Родителей», переопределить новым
class Person{ constructor(name, first, second){ this.name=name; this.first=first; this.second=second; } sum(){ return (this.first + this.second); } } class Person2 extends Person{ // override Person constructor(name, first, second, third){ super(name, first, second); // Takes Parents properties this.third = third; } sum(){ // Takes Parents properties // but want to override parents' method return super.sum() + this.third; } } const kim = new Person2('kim', 10, 20, 30); console.log(kim.sum()); // 60
Поля (общедоступные и частные)
Поля класса по умолчанию являются общедоступными, но частные члены класса могут быть созданы с использованием префикса хэша #
. Инкапсуляция конфиденциальности этих функций класса обеспечивается самим JavaScript. Он инкапсулирует необходимые внутренние данные, чтобы их нельзя было увидеть или изменить извне.
private(#), public(default), protected : этого нет в JavaScript, но им можно управлять, добавляя#
.
- private(#): нельзя увидеть или изменить извне. (можно использовать только ВНУТРИ)
- public : можно увидеть или изменить снаружи.
- protected : нельзя увидеть или изменить извне, но можно увидеть или изменить ТОЛЬКО из унаследованного дочернего класса.
class Foo { #brand = 100; static isFoo(obj) { return #brand in obj; } } const foo = new Foo(); const foo2 = { brand: 100 }; console.log('foo : ', Foo.isFoo(foo)); // true console.log('foo2 : ', Foo.isFoo(foo2)); // false