Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该在es6中创建一个新的utils类吗?_Javascript_Es6 Class - Fatal编程技术网

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()
      }
    }