【问题标题】:JS static properties vs. adding property using classnameJS 静态属性与使用类名添加属性
【发布时间】:2020-03-10 09:30:28
【问题描述】:

这两个例子在功能上有区别吗?为什么你更喜欢其中一个?

静态属性:

class FirstExample {
    static baz = "Something";
    static biz = 10;

    //rest of class
}

使用类名添加:

class SecondExample {
     //Rest of class
}

SecondExample.biz = "Something";
SecondExample.baz = 10;

【问题讨论】:

  • 第一个更独立,更少重复......?!

标签: javascript class static


【解决方案1】:

这两个例子在功能上有区别吗?

没有。

为什么你更喜欢其中一个?

你可以考虑第一个更独立和更好地表达意图。由于属性是静态定义的,因此工具甚至 JavaScript 解释器都可以更轻松地分析类。

仅当您需要添加仅在运行时才知道的属性时才需要第二种形式(但这可能不是一个好主意)。


如果觉得这是新 JS 语法反复出现的问题/问题。许多新语法只是语法糖,即它不能解决以前无法以不同方式解决的问题。

当然,您可以继续执行您之前所做的操作,并像分配任何其他属性一样分配属性。从表面上看,功能是相同的。

但正如我在上面所暗示的,专用语法的优点是更容易对外部工具和解释器本身进行静态分析。

【讨论】:

  • 谢谢。我只是想确定一下,因为我想不出为什么要遵循这种模式而不是使用静态。这些属性中没有一个仅在运行时可用,因此我可以安全地重构为使用 static 关键字并稍微清理一下代码。
【解决方案2】:

在给定的示例中,它不会有任何区别,但在某些情况下它可以,例如,如果在尚未定义变量的时刻使用类方法,因为在第二种情况下它们是在外部定义。

【讨论】:

  • 你能举个例子吗?我无法想象这会成为问题的情况。
  • ` class SecondExample { //类的其余部分 } console.log(SecondExample.biz); // 未定义的 console.log(SecondExample.baz); // undefined SecondExample.biz = "Something"; SecondExample.baz = 10; console.log(SecondExample.biz); // 一些东西 console.log(SecondExample.baz); // 10 `
  • 然而,这不是一个类方法......我知道这些属性在分配之前不存在。
  • 关键是会有一段时间不会填充这些变量,而在第一种情况下则不会。
  • 当然,但我希望人们足够聪明,能够在调用需要这些变量的函数时意识到它们被分配之前。将作业直接放在类定义之后就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多