typescript - 使用 Object.assign 在 Typescript 中重载构造函数
问题描述
我看到很多关于 Typescript 的构造函数重载技巧的问题。
实际上有什么理由不使用空构造函数然后像这样实例化类吗?
const obj = Object.assign(new MyClass(), {a: 'check', b: 'mate'})
解决方案
这违反了对象负责维护自己的内部状态的原则,并且它将创建MyClass
对象的代码与该状态的类表示形式紧密耦合(以哪些属性保存哪些数据的形式)。
您可能想要在构造函数中做的一件常见事情是验证输入;例如,如果矩形的宽度或高度为负数,则抛出错误。您的代码不允许这样做,因为直到构造函数返回后才分配属性,因此构造函数看不到它们。
您可能想要做的另一件事是添加一些具有预先计算值的额外字段。例如,如果一个类用x
,y
和z
坐标表示一个向量,并且您有一个length()
计算长度的方法,您可能需要重构它,以便构造函数计算一次长度,将其存储在一个_length
属性中,然后该length()
方法返回该属性。您的代码不允许该重构,因为构造函数将无法看到x
,y
或z
值。
推荐阅读
- java - 有人可以用 SamePlaceExceptiona 和 WeightException 的自定义异常类解释这段代码的工作原理吗?
- stata - 条形图的位置
- selenium-webdriver - 在 qmetry 中的驱动程序之间来回切换
- reactjs - 在我的反应钩子页面中单击 Google 登录按钮时,什么也没有发生
- java - Spring Boot Batch - 使用 CompositeItemWriter 停止和启动多线程步骤
- html - 提交表单 Laravel 后根据单选按钮重定向
- javascript - 为什么 localStorage 中的更改直到刷新才更新?
- postgresql - 显示从 psql 函数的主体生成的一些值,如 ES2016 中的 console.log 所做的那样
- c++ - GMock - 来自第三方库的模拟类
- python - 通过在 python 中使用部分匹配比较来自不同数据帧的 2 列来映射值