在 JavaScript 中使用静态变量
Working of static variables in JavaScript
对 static
在 javascript 中的工作方式有些困惑。
function StaticExample() {}
StaticExample.staticProp = "Hello"
console.log(StaticExample.staticProp) // "Hello"
我在这里创建了一个 function
,然后创建了一个静态变量 staticProp
(如果我们可以称其为 static 则不会)。这会将字段 staticProp
添加到 StaticExample
的 prototype
上的 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
,这是不同对象的不同 属性。
对 static
在 javascript 中的工作方式有些困惑。
function StaticExample() {}
StaticExample.staticProp = "Hello"
console.log(StaticExample.staticProp) // "Hello"
我在这里创建了一个 function
,然后创建了一个静态变量 staticProp
(如果我们可以称其为 static 则不会)。这会将字段 staticProp
添加到 StaticExample
的 prototype
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
,这是不同对象的不同 属性。