Javascript 覆盖类实例方法有什么问题吗?

Javascript 覆盖类实例方法有什么问题吗?,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,覆盖ES6类实例方法是一种不好的做法吗 假设我有一个类Person,类Person的所有实例都有一个wakeUp方法,该方法默认调用washFace()和eatbreanch()函数。这是Person的所有实例所需的回退行为,但是某些实例可能具有不同的唤醒例程,对于那些实例,我覆盖默认的唤醒方法: class Person { constructor(name) { this.name = name; } wakeUp() { washFace() eatB

覆盖ES6类实例方法是一种不好的做法吗

假设我有一个类
Person
,类Person的所有实例都有一个
wakeUp
方法,该方法默认调用
washFace()
eatbreanch()
函数。这是Person的所有实例所需的回退行为,但是某些实例可能具有不同的
唤醒
例程,对于那些实例,我覆盖默认的
唤醒
方法:

class Person {
  constructor(name) {
    this.name = name;
  }

  wakeUp() {
    washFace()
    eatBreakfast()
  }

}

const user1 = new Person('Jon Doe');
const user2 = new Person('Jane Doe');

user1.wakeUp = () => {
    washFace()
    drinkCoffee()
}

user2.wakeUp = () => {
    washFace()
    drinkTea()
}
这正如预期的那样有效,但是我并不经常看到它在使用,所以我只是想知道这是否是一种不好的做法/为什么


编辑:上面的例子只是一个简化,这是一个CRUD钩子库,一些实例有自己的CRUD钩子行为,不与任何其他实例共享,只适用于那个实例,例如,这个特定实例的onDelete调用foo,此外,所有实例都是在代码库中创建和记录的

您给出的示例非常做作,因此这一问题的答案将在一定程度上取决于实际情况

在某些情况下,重写特定对象的方法可能很有用。例如,这通常在单元测试期间完成

我认为通过子类化和多态性实现这一点更为常见

然而,在现实世界中,我认为子类和多态性并没有太多的用途(除了许多显著的例外),而且通常情况下,在强制或功能上做得更好


因此,这里没有一个真正的答案。

你给出的例子非常做作,所以这个问题的答案将有点取决于现实世界的情况

在某些情况下,重写特定对象的方法可能很有用。例如,这通常在单元测试期间完成

我认为通过子类化和多态性实现这一点更为常见

然而,在现实世界中,我认为子类和多态性并没有太多的用途(除了许多显著的例外),而且通常情况下,在强制或功能上做得更好


因此,这里没有一个真正的答案。

你的用户真的是这样单独的吗?或者你想要子类?这表明设计很奇怪。你有真实世界的例子吗?“这和预期的一样有效”-没有。您需要使用
this.
来调用方法,并且不能将箭头函数用作方法。我认为最好定义每个行为,也许这会对您有所帮助:重写方法没有错,只是这样做不对。这是一个设计问题,因此只会带来意见。你的用户真的是单独的还是你想要子类?这表明设计很奇怪。你有真实世界的例子吗?“这和预期的一样有效”-没有。您需要使用
this.
来调用方法,并且不能将箭头函数用作方法。我认为最好定义每个行为,也许这会对您有所帮助:重写方法没有错,只是这样做不对。这是一个设计问题,因此只会带来意见。所以这里没有一个真正的答案这就是为什么这个问题应该以观点为基础关闭的原因,比如“在现实世界中,我认为……”所以这里没有一个真正的答案这就是为什么这个问题应该以观点为基础来结束——比如“在现实世界中,我认为……”:-)