在 JavaScript 中使用静态变量

Working of static variables in JavaScript

static 在 javascript 中的工作方式有些困惑。

function StaticExample() {}

StaticExample.staticProp = "Hello"

console.log(StaticExample.staticProp) // "Hello"

我在这里创建了一个 function,然后创建了一个静态变量 staticProp(如果我们可以称其为 static 则不会)。这会将字段 staticProp 添加到 StaticExampleprototype

上的 constructor 字段

问题 1:此行为是否有特定原因(字段被添加到构造函数 属性)?

现在 constructor 重写如下。

StaticExample.prototype.constructor = {}

console.log(StaticExample.staticProp) // "Hello"

甚至在那之后,当我尝试访问 StaticExample.staticProp 时,它提供了 Hello

的正确值

问题 2:staticProp 从哪里获取,即使最初添加它的 constructor 被覆盖。

StaticExample 是一个对象。一个函数对象,但仍然是一个对象。
您为其分配一个新的 属性:StaticExample.staticProp = "Hello".

StaticExample 也正好有一个 属性 prototype.
属性 StaticExample.prototype.constructor 指向 StaticExample.

现在,您显然可以访问 StaticExample.staticProp,因为它只是您分配的对象的 属性。

你也可以把StaticExample.prototype.constructor的值换成别的东西;现在 StaticExample.prototype.constructor 不再指向 StaticExample。但是 StaticExample 仍然是 StaticExample 并且它仍然具有您在其上创建的 属性 staticProp。您没有以任何方式替换 StaticExample 对象。您替换的是 StaticExample.prototype.constructor,这是不同对象的不同 属性。