Допустим, у нас есть класс ABC:
class ABC{
constructor(param1, param2){
this.prop1 = param1;
this.prop2 = param2;
}
ABCMethod1(){
console.log(this.prop1 + ' ' + this.prop2);
}
}
И еще один класс XYZ, который расширяет класс ABC:
class XYZ extends ABC{
XYZMethod1(){
this.ABCMethod1();
}
}
Итак, в ES6 появилось новое ключевое слово super, которое используется для доступа к членам родительского класса в дочернем классе. Но я могу очень легко получить доступ к членам родительского класса в дочернем классе, используя this:
var myObject = new XYZ('Property 1','Property 2');
myObject.XYZMethod1();
Который печатает следующее в консоли браузера:
Property 1 Property 2
Теперь давайте сделаем то же самое, используя super вместо this в дочернем классе XYZ:
class XYZ extends ABC{
XYZMethod1(){
super.ABCMethod1();
}
}
Теперь давайте снова вызовем метод XYZmethod1(), чтобы посмотреть, что получится в результате:
var myObject = new XYZ('Property 1','Property 2');
myObject.XYZMethod1();
Который печатает следующее в консоли браузера:
Property 1 Property 2
Результат: И this, и super возвращают один и тот же вывод Property 1 Property 2
в консоли. Итак, если мы можем получить доступ к родительским методам с помощью this, то какова цель super в ES6, зачем нам его использовать? Кто-нибудь может рассказать простыми словами на примере?