Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var obj = {
toString() {
return "MyObject: " + super.toString();
}
}
console.log(obj.toString()); // MyObject: [object Object]
var a = obj.toString;
console.log(a()); // MyObject: [object Undefined]
MyObject: [object Object] и MyObject: [object global] соответственно. А в FF super не работает :(class Some {
toString() {
return "MyObject: " + super.toString()
}
}
class Another extends Some {
toString() {
return "Another: " + super.toString()
}
}
var obj1 = new Another();
console.log(obj.toString()); // Another: MyObject: [object Object]
var a = obj1.toString;
console.log(a()); // Another: MyObject: [object Undefined]
super получается как его прототип на рантайме, а контекстом получения свойства (возможный вызов геттеров) и исполнения метода становится текущий this. То есть для super.toString(); в данном случае полноценным дешугарингом является:Reflect.apply(Reflect.get(Reflect.getPrototypeOf(obj), 'toString', this), this, []);
Тонкости ES6: Наследование (часть 1)