javascript 为什么要使用Object.setPrototypeOf?

elcex8rz  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(104)

我不明白为什么Object.setPrototypeOf(this, DatabaseConnectionError.prototype);需要在下面的源代码。

export class DatabaseConnectionError extends Error {
  reason = "Error connecting to database";

  constructor() {
    super("Error connecting to database");

    Object.setPrototypeOf(this, DatabaseConnectionError.prototype);
  }
}
nnt7mjpx

nnt7mjpx1#

示例化一个类会导致示例在默认情况下从类继承(在其原型链中具有类的原型),所以不应该需要显式地将原型设置为类的原型。
虽然下面不是这种情况,但这里有一个类似的场景:在构造类之后设置原型允许示例例如。从不同类继承方法。

class A {
  constructor() {
    this.a = "initialized";
  }
}

class B {
  b() { return "inherited"; }
}

class C extends A {
  constructor() {
    super();
    
    Object.setPrototypeOf(this, B.prototype);
  }
}

const c = new C(); // Clearly constructed from C ...

console.log("c.a:", c.a);
console.log("c.b:", c.b);
console.log("c instanceof C?", c instanceof C); // ... but undeterminable via prototype-chain.

注意:这会混淆对象是从哪个类构造的;见上文第三个日志。

无论如何,我认为你应该更喜欢一个合理的原型链,而不是上面的任何东西。

相关问题