【问题标题】:ES6 Classes: How do I get `this.foo` property in base class constructor assigned to derived class prototype?ES6 类:如何在分配给派生类原型的基类构造函数中获取 `this.foo` 属性?
【发布时间】:2015-09-16 04:20:59
【问题描述】:

我遇到的问题是,当实例化 B 类时,如果我在 B 上传入 options.foothis.foo 将分配给 A 类而不是 B 类。

我想创建一个基类(在本例中为类 A),它将 this.foo 分配给派生类原型(在本例中为类 B)。

class A {

  constructor(options = {}) {

    this.foo = options.foo

  }

}

class B extends A {

  constructor(options = {}) {

    super(options)

  } 

}

var b = new B()
console.log(b.prototype.foo) // undefined

【问题讨论】:

  • 这怎么可能? new B(...) 返回单个对象。您是说该对象没有属性foo?我不清楚您所说的“分配给 A 类而不是 B 类”是什么意思。此处没有为 class 分配任何内容。
  • 我不知道这是什么意思。没有任何东西被分配给“班级”。您正在构建的对象将其foo 属性设置为options.foo,无论其结果如何。
  • b 甚至没有 prototype 属性。你期望它来自哪里?您的代码明确表示应该将foo 分配给新创建的对象,即b.foo。如果你对this、构造函数和原型不是很熟悉,我推荐阅读You Don't Know JS: this & Object Prototypes

标签: javascript class ecmascript-6


【解决方案1】:

this.foo 是一个实例属性,它被分配给b。它永远不会分配给 .prototype 对象(它将在实例之间共享)。

如果您想要分配给类的属性,您应该查看static 关键字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2016-12-20
    • 2016-07-19
    • 1970-01-01
    • 2014-03-26
    • 2012-12-24
    相关资源
    最近更新 更多