如何创建工厂函数而不是使用类

时间:2017-04-03 18:40:51

标签: javascript

我正在使用一个在他们的模块中实现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});

1 个答案:

答案 0 :(得分:2)

你应该习惯于new,这比在工厂里做原型继承要简单得多。

当然,将构造函数转换为工厂函数是微不足道的:

function classToFactory(constr) {
    return (...args) => new constr(...args);
}

const makeExample = classToFactory(Example);
const newInstance = makeExample(123456789); // no `new` any more