Что такое ключевое слово super

Ответ

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

Пример:

class Parent {
  constructor(name) {
    this.name = name;
  }
  greet() {
    return `Hello, ${this.name}`;
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name); // Вызов конструктора Parent
    this.age = age;
  }
  greet() {
    return `${super.greet()}! You are ${this.age} years old.`;
  }
}

const child = new Child('Alice', 25);
console.log(child.greet()); // "Hello, Alice! You are 25 years old."

Важные моменты:

  1. В конструкторе super() должен вызываться до использования this
  2. В методах super.method() позволяет вызывать методы родителя
  3. Работает только в классах с extends

Ответ 18+ 🔞

А, ну вот, опять про этот ваш super, блядь. Слушай, как будто без него вообще нихуя не работает, да? Ну ладно, разберём, раз уж такие умные.

Представь, есть у тебя класс Parent, ну, типа родитель, старый пердун. У него есть конструктор, который принимает name и запихивает его в this.name. И метод greet, который тупо здоровается. Всё просто, пиздец.

class Parent {
  constructor(name) {
    this.name = name;
  }
  greet() {
    return `Hello, ${this.name}`;
  }
}

А теперь появляется его отпрыск, класс Child, который extends Parent. То есть он, типа, наследник, всё от папочки получил, но ещё и своё говно притащил — в данном случае age.

class Child extends Parent {
  constructor(name, age) {
    super(name); // Вызов конструктора Parent
    this.age = age;
  }
  greet() {
    return `${super.greet()}! You are ${this.age} years old.`;
  }
}

И вот тут-то, сука, и появляется наш герой — super. В конструкторе Child мы сначала кричим: «Папааа! (super(name)) Иди сюда, инициализируй своё старое говно, имя там своё установи!». И только ПОСЛЕ этого, блядь, мы имеем право говорить про this.age. А то будет ошибка, типа «ой, а this кто такой?». Правильно, ебать, потому что this создаётся в родительском конструкторе, ты чё, не знал?

А в методе greet ребёнка мы тоже используем super.greet(). Это типа: «Пап, ты там сначала поздоровайся по-своему, старомодно, а я уж потом своё молодёжное, ебаное age прилеплю». И получается красиво: «Hello, Alice! You are 25 years old.».

И главное, запомни, ёпта:

  1. В конструкторе — super() вызывай ПЕРВЫМ ДЕЛОМ, а то получишь пизды от интерпретатора.
  2. В методах — super.method() это крик в прошлое, типа «папа, сделай тут базовую часть, а я уж сверху наворочу».
  3. И работает эта магия ТОЛЬКО если ты написал extends. Без этого — нихуя, просто слово super болтается в воздухе, как хуй без штанов.

Вот и вся философия, блядь. Не такой уж он и сложный, этот super, когда разберёшься. Просто не будь мудаком, вызывай родителя вовремя.