typescript 获取对象属性,但不获取父对象属性

tktrz96b  于 2023-05-01  发布在  TypeScript
关注(0)|答案(2)|浏览(182)

我有两个班级:

export class A extends B {
  private prop1: string;
  private prop2: string;
  constructor() {
    this.prop1 = "A";
    this.prop2 = "A";
  }
}

export abstract class B {
  private prop3: "B";
  constructor() {
    this.prop3 = "B";
  }
}

let a = new A();
let b = new B();

如果我现在执行Object.getOwnProperties(a),我也会获得继承类b的属性。--〉prop1, prop2, prop3
有没有办法只得到prop1prop2,而忽略prop3,因为它只是一个继承的属性?
我知道那个物体。getOwnProperties(a)是错误的方法,但是有没有其他方法可以只获取baseClass的属性,而不是它的继承类呢?

nxagd54h

nxagd54h1#

不可能的
当你扩展一个类时,你通过传递子对象作为“this”对象来调用父构造函数。因此,如果你在父类中设置属性,你也会自动在子类中设置它们。

class Parent {
   this.parentProp = "A";
}
class Child extends Parent {
   this.childProp = "B";
}

在引擎盖下,他们会这样做:

function Parent() {
   this.parentProp = "A";
}

function Child() {
   //...
   //some prototype manipulation here to make Child extend Parent
   //...
   Parent.apply(this, arguments); //this calls the Parent function with "this" being the child object
   this.childProp = "B";
}

new Child() // {parentProp: "A", childProp: "B"}
cwdobuhd

cwdobuhd2#

不,这是不可能的(除了硬编码要获取的属性名称)。
这些是示例属性,而不是原型继承的属性。prop1prop2prop3在运行时是不可区分的,它们都是对象本身的属性。在示例上创建它们的构造函数没有区别。

相关问题