** Наследование классов, поля (общедоступные и частные)

Наследование классов

Родительский класс и Дочерний класс имеют общие свойства и методы. Наследование позволяет дочерним классам наследовать свойства и методы родительского класса. Также можно добавить свойства или методы, которых нет в родительском классе.

  • 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