我正在使用一个在他们的模块中实现ES6类的javascript库。我没有在javascript中使用经典继承,并且基本上想要"撤消"他们的班级实施。有没有办法我可以采取这些类,仍然在工厂/组合方法中使用它们。我想利用JS原型继承和对象的易组合性。以下是我到目前为止所拥有的一个例子。最终我试图避免使用class和new,因为我不习惯在JavaScript中使用它。谁能告诉我,如果我以正确的方式接近这个,或者我只是在浪费时间,谢谢你。
class Example {
constructor(id) {
this.id = id;
}
getID() {
console.log(this.id);
}
}
function convertClassToObject(theClass) {
var x = new theClass();
var newX = Object.create(x);
return newX;
}
var NewPrototype = convertClassToObject(Example);
function NewFactory(options) {
var x = Object.assign(Object.create(NewPrototype), options);
return x;
}
var NewInstance = NewFactory({id: 123456789});
答案 0 :(得分:2)
你应该习惯于new
,这比在工厂里做原型继承要简单得多。
当然,将构造函数转换为工厂函数是微不足道的:
function classToFactory(constr) {
return (...args) => new constr(...args);
}
const makeExample = classToFactory(Example);
const newInstance = makeExample(123456789); // no `new` any more