class Line extends Shape {
static howToDrag = { point: 0, update: 'xy' }
static config = { color: 'white' }
render() {
console.log('render based on this.config', this.config)
}
}
class Shape {
constructor({ config }) {
this.constructor.howToDrag = expandProperty1(this.constructor.howToDrag)
this.config = config || this.constructor.config
}
drag() {
console.log('drag based on this.constructor.howToDrag ', this.constructor.howToDrag)
}
}
function expandProperty1({ point, update }) {
if (typeof update === 'string') {
return {
point,
update: {
[point]: update
}
}
}
}
这是代码,如果您可以理解我在做什么,请跳过以下说明,并提供一些有关使用OOP的更好方法的建议,因为从我的角度看,当前的实现非常合理。
查看http://canvas-chart.herokuapp.com/,了解我在做什么,我将解释上面的代码。
首先让我们谈谈静态属性config
。 config
应该属于每个实例,即每个实例都应该有自己的config
,为什么我将其命名为static
?原因是存在一些与config相关的通用逻辑,即它应该是从构造函数传递的值,否则,它具有默认值。通过将config
设置为static
,我可以在'Base'类中实现这种通用逻辑,而不必在每个Derived
类中一遍又一遍地写它
另一个问题是howToDrag
,它是真实的static
。但是static
由基类使用但在派生类中定义,这是正常现象吗?而且,派生类中的静态属性在基类中发生了突变。
当前是合乎逻辑的,但是我总是想知道这是否是进行OOP的方法,因为它依赖于this.constructor
是派生类的基类指向这一事实。