Поскольку вы используете new this
в своих static
членах, они будут создавать экземпляры любого класса, к которому они обращаются. Например, вызовы JSONContent.fromPath(...)
(JSONContent
наследуют его от ParseContent
, поскольку ParseContent
является прототипом JSONContent
- функция, довольно точно определяющая c до JavaScript и TypeScript), создаст JSONContent
экземпляр, потому что во время вызова fromPath
, this
равен JSONContent
. Он будет использовать parse
на JSONContent
по той же причине: this
is JSONContent
.
Пример:
class Parent {
static wrapper() {
return this.create();
}
static create() {
const ctor = (this && this[Symbol.species]) || this;
return new ctor();
}
}
class Child extends Parent {
}
console.log(Child.create() instanceof Child); // true
console.log(Child.wrapper() instanceof Child); // true
Вы можете дать подклассам возможность переопределить это с помощью вида (и, вероятно, других), но мое понимание того, что вы спрашиваете, что вы хотите поведение по умолчанию.