首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么enumerable: false不级联到TypeScript中的继承类?

在TypeScript中,当我们使用类继承时,可以通过设置属性的enumerable属性为false来控制该属性是否可枚举。然而,这个设置不会级联到继承类中的属性。

这是因为在TypeScript中,继承是通过原型链来实现的。当一个类继承另一个类时,它实际上是继承了父类的原型对象,而不是直接继承父类的属性。因此,父类中设置的enumerable属性不会直接影响到继承类。

举个例子来说明,假设有一个父类Parent和一个继承类Child,并且在父类中有一个属性name,并将其设置为enumerable: false。在父类中,这个属性将不可枚举,即无法通过for...in循环遍历到。

代码语言:typescript
复制
class Parent {
  name: string;

  constructor(name: string) {
    this.name = name;
    Object.defineProperty(this, 'name', { enumerable: false });
  }
}

class Child extends Parent {
  age: number;

  constructor(name: string, age: number) {
    super(name);
    this.age = age;
  }
}

const child = new Child('Alice', 10);

for (const key in child) {
  console.log(key); // 输出 'age',而不会输出 'name'
}

在上面的例子中,尽管父类Parent中的name属性被设置为不可枚举,但在继承类Child中仍然可以通过for...in循环遍历到。

总结来说,enumerable: false只会影响到当前类中的属性是否可枚举,而不会级联到继承类中。这是因为继承是通过原型链实现的,继承类实际上继承了父类的原型对象,而不是直接继承父类的属性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • TS 设计模式05 - 装饰者模式

    在 oop 中,继承是实现多态最简单的方案。同一类的对象会有不同表现时,我们基于此基类去写派生类即可。但有时候,过度使用继承会导致程序无法维护。比如说,人有一个展示自己外观的方法,穿上不同的衣服这个展现形式就不一样。一个人可以选择穿 T-shirt,裤子,裙子,外套等等,它的顺序和搭配是不固定的,如果使用继承,我们对每种组合都需要去定义一个类,比如穿裤子的人,穿裙子的人,穿裤子和裙子的人,先穿裤子再穿外套的人......这样会是我们的程序变得非常庞大而难以维护。 事实上,不管穿什么衣服,本质上仍然是人,衣服只是基于人类的装饰而已。装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

    01
    领券