Вариант 1: Создаваемым объектам можно переопределять свойство
__proto__, а взять его можно из экземпляра класса:
class myClass {
createSomeObj() {
const newObj = { 1: 1, 2: 2 };
newObj.__proto__ = this.__proto__;
return newObj;
}
}
const instance = new myClass();
const instanceOfInstance = instance.createSomeObj();
console.log(instanceOfInstance.createSomeObj()); // myClass {1: 1, 2: 2}
Демо.
Объекту будут доступны методы класса и он будет проходить проверку
instanceof.
Вариант 2: Вы так же можете переопределять лишь конструктор:
class myClass {
createSomeObj() {
const newObj = { 1: 1, 2: 2 };
newObj.__proto__.constructor = myClass;
return newObj;
}
}
const instance = new myClass();
console.log(instance.createSomeObj()); // myClass {1: 1, 2: 2}
Демо.
В этом случае объекту не будут доступны методы класса и он не будет проходить проверку
instanceof.
Вариант 3: Статический метод и прямое создание экземпляра.
class myClass {
constructor(props) {
Object.keys(props).forEach(key => this[key] = props[key]);
}
static createSomeObj() {
return new myClass({ 1: 1, 2: 2 });
}
}
console.log(myClass.createSomeObj()); // myClass {1: 1, 2: 2}
Демо.
Прямое создание экземпляра класса, без необходимости в экземпляре для его создания.
Думаю, вам больше подойдут третий или первый варианты.