Javascript 我应该在es6中创建一个新的utils类吗?
我已经声明了一个类,比如:Javascript 我应该在es6中创建一个新的utils类吗?,javascript,es6-class,Javascript,Es6 Class,我已经声明了一个类,比如: export default class Utils { static deepClone(): object { return {} } } 因此,当我想使用deepClone时,我可以: // First One import Utils from './Utils'; export default class Element { constructor(){ this.utils = new Utils(
export default class Utils {
static deepClone(): object {
return {}
}
}
因此,当我想使用deepClone时,我可以:
// First One
import Utils from './Utils';
export default class Element {
constructor(){
this.utils = new Utils()
}
create(){
return this.utils.deepClone()
}
}
或:
我想知道暗示元素类的更好方法是什么
期待您的回复,我非常感谢您第二种方法更正确,但它有一个问题,您应该创建一个Utils类的实例来使用每个属性,而不是静态方法 您没有创建实例的类的输出是一个函数,而不是原型的对象 /Utils.js
导出默认类Utils{
静态deepClone():对象{
返回{}
}
公共服务(扩展){
//深度克隆代码
}
}
在其他文件中使用:
从“/Utils”导入Utils;
导出默认类元素{
构造函数(){
this.utils=新utils();
}
创建(){
返回Utils.deepClone()
}
扩展(){
返回这个.utils.deepExtend()
}
}
我将返回Utils的export new,并将其作为实例传递到元素的构造函数中,类似于:
IUtils = someInterface;
export default class Element {
constructor(utils: IUtils){
this.utils = utils;
}
create(){
return this.utils.deepClone()
}
}
通过这些方式:
不会免费创建新实例
使用可以传递给元素的其他实例
是可测试的
当实例可以拥有自己的数据时,类很有用。如果不是,那么类就没有意义了,只需使用普通对象就可以了……因此第二个代码片段将不起作用,因为deepClone
不是静态方法(即,它不是构造函数的成员)。谢谢你的回复,所以Utils类最好声明为普通对象而不是静态函数?
IUtils = someInterface;
export default class Element {
constructor(utils: IUtils){
this.utils = utils;
}
create(){
return this.utils.deepClone()
}
}