У меня есть файл со следующим кодом:
class Animal {
doSomething = () => {
return 'Hi.';
};
}
class Dog extends Animal {
doSomething = () => {
return super.doSomething() + ' Woof!';
};
}
console.log(new Dog().doSomething());
Примечание: попытка запустить фрагмент выше, вероятно, не будет работать, потому что я не могу понять, как заставить его использовать мои настройки Babal.
В любом случае, когда я компилирую его с помощью Babel и запускаю его в Node, я получаю следующую ошибку:
/Users/elias/src/classFieldTest/build/classFieldTest.js:15
return super.doSomething() + ' Woof!';
^
TypeError: (intermediate value).doSomething is not a function
at Dog.doSomething (/Users/elias/src/classFieldTest/build/classFieldTest.js:15:26)
at Object.<anonymous> (/Users/elias/src/classFieldTest/build/classFieldTest.js:21:23)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
Я использую Babel 6.26.0 с предустановкой stage-2
и Node 8.11.1.Я могу показать команды, которые использую, если кому-то все равно.
Почему это происходит?Я предполагаю, что super
нельзя использовать для доступа к полю класса, но что мне делать с этим?Если я изменю doSomething
метод Animal
на традиционный метод (doSomething() { return 'Hi.'; }
), он будет работать, но я бы предпочел избегать традиционных методов, так как они переопределяют this
и всю путаницу, которую он вызывает.
Есть ли способ получить доступ к полю класса суперкласса?