gpt4 book ai didi

javascript - 访问任意父类(super class)中声明的属性

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:12 24 4
gpt4 key购买 nike

在 JavaScript 中,要访问在直接父类中声明的(非静态)属性 getter 或 setter,我们都应该知道,我们可以使用 super:例如foo = super.barsuper.foo = bar

访问超父类(super class)(或下一个父类以外的父类(super class))中声明的重写属性的正确方法是什么?

到目前为止我发现的最佳解决方案是使用Relect.get。它当然可以工作,但是它非常丑陋并且看起来像一个黑客。希望你能理解我的感受。

class A {
get foo() {
console.log('evaluating A.foo');
return this.a;
};
}

class B extends A {
get foo() {
console.log('evaluating B.foo');
return this.b;
};
}

class C extends B {
get foo() {
// Can we get this better?
return Reflect.get(A.prototype, 'foo', this);
}
}

const c = new C;
c.a = 'ok';
c.b = 'not ok';
console.log(c.foo);

是否有一种优雅的方式来访问在任意父类(super class)中声明的属性 getter/setter?

最佳答案

我认为它不会变得比这更优雅/更简单。 JavaScript 中没有 super.super 或类似的东西。

您可以通过 getPrototypeOf 来遍历原型(prototype)链(尽管这样做并不完全是 super 所做的,super 使用方法的 [[HomeObject]] 的原型(prototype)),但这并不会变得更简单或更优雅。 :-) 更灵活(例如,不硬编码为 A),但并不更优雅。

关于javascript - 访问任意父类(super class)中声明的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41851853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com