Есть еще один способ добраться из базового класса, до класса самого верхнего наследника.
this.constructor
Причем, это прокатывает даже в определении полей, в отличие от new.target, который работает только непосредственно в конструкторе
/**
* @abstract
*/
class AbstractHttpService {
baseRouteName = this.constructor.baseRouteName;
constructor(baseRouteName) {
if (baseRouteName) this.baseRouteName = baseRouteName;
}
}
class ProductsHttpService extends AbstractHttpService {
static baseRouteName = 'product';
}
let x = new ProductsHttpService ()
console.log (x.baseRouteName)