【问题标题】:How to update parent class property so it would be available for existing child class instances如何更新父类属性,使其可用于现有的子类实例
【发布时间】:2022-01-20 11:32:42
【问题描述】:

我有多个具有相同父类的类实例。对于特定情况,需要更新父类属性,以便子类的所有可用实例都可以访问更新后的属性。

如果类属性不存在,我可以通过prototype 访问它:

class Foo {
    someVal = 'Hello'
}

class Bar extends Foo {

}

let inst = new Bar()
Foo.prototype.someNewValue = 'Hello World'
console.log(inst.someNewValue) //Hello World

但在我的情况下,我需要更新一个已经存在的属性:

class Foo {
    someVal = 'Hello'
}

class Bar extends Foo {

}

let inst = new Bar()
Foo.prototype.someVal= 'Hello World'
console.log(inst.someVal) //Still output "Hello" because existing property value has a more priority than a value from prototype. While "Hello World" is desirable

【问题讨论】:

  • 我认为类字段someVal在原型上不存在,而是在构造函数中定义。
  • 您所描述的不是实例变量或属性。它是一个类静态属性(一个可用于所有实例的值)。听起来您应该将属性更改为静态类,并更改访问它的方式以引用静态类。类实例属性对于类的每个实例都是唯一的,因此具有独立的值。
  • @jfriend00 谢谢。通过一些代码修改,它解决了我的要求。

标签: javascript ecmascript-6


【解决方案1】:

使用prototype,你不能覆盖和改变类的属性,但是你可以给类设置新的属性 试试这个:

  class Foo {}
    
  class Bar extends Foo {}
    
  let inst = new Bar();
  Foo.prototype.someVal = "Hello World";
  console.log(inst.someVal);
  //hello world

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多