虽然 CustomError 的对象函数无法使用,但 CustomError 仍然支持 protected 级别的方法供子类使用,阉割的地方在于自己不能调用。 由于 JavaScript 中对象属性必须在构造函数内赋值,因此对象属性也不会受到影响。也就是说:
class CustomError extends Error { count: number = 0 constructor(msg) { super(msg) this.count // OK,属性不受影响 this.print() // TypeError: _this.print is not a function,因为 this 被替换了 } print() { console.log(this.stack) } } class DerivedError extends CustomError { constructor(msg) { super(msg) super.print() // OK,因为 print 是直接从父类原型获取的,即 `_super.prototype.print` } }