【问题标题】:Is it possible to access class properties without initialising the class?是否可以在不初始化类的情况下访问类属性?
【发布时间】:2017-10-12 22:17:14
【问题描述】:

我想访问将在调用构造函数时定义的类的所有属性,以便我可以为该类实现某种接口。

假设我有一个定义属性hello 的类,我想访问它以检查它是否已实现以及分配给它的类型是否正确。问题是,由于所有非static 类属性都绑定到一个实例,如果不实例化类,我就无法获得它们,而我做不到。

在这种情况下,是否可以访问hello

class MyClass {
    constructor () {
        this.hello = 'greetings';
    }
}

【问题讨论】:

  • 在没有实例的情况下访问实例属性 - 根据定义,不,你不能。这听起来像是一个 XY 问题 - 你实际上想要实现什么
  • JavaScript 是一种动态语言。你似乎想要一个静态的。 TypeScript 可能会满足您的需求。
  • “我做不到。” 为什么?
  • 创建一个临时实例来获取这些属性名称,这是最简单的方法。
  • 您要么希望 Typescript 具有适当的静态类型检查;或者您想在运行时执行此操作,此时我看不到您必须在一个类而不是一个实例上执行此操作的场景......在这里进行一些澄清会有很长的路要走。

标签: javascript class


【解决方案1】:

在这种情况下,是否可以访问hello

不使用 JavaScript 解析器(就像 IDE 尝试推断实例 mbmers 一样)。 hello,正如您所说,在/除非创建实例之前不作为属性存在。使用解析器,您可以(通常)确定属性名称,有时可能是它们的初始值,但仅此而已。

【讨论】:

  • 即使使用解析器,this[some + expression] = 'value' 仍然是可能的,而且基本上不可能被捕获。
  • @deceze:因此“通常”:-)
  • let self = this; self.foo = 'bar';...抱歉,这里只是堆砌各种场景... :)
  • 评论不用于扩展讨论;这个对话是moved to chat
猜你喜欢
  • 2019-05-09
  • 1970-01-01
  • 2015-06-03
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2022-01-20
相关资源
最近更新 更多