Допустим, у нас есть класс 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, зачем нам его использовать?Кто-нибудь может сказать простыми словами на примере?