关于static
在javascript中的工作方式有些困惑。
function StaticExample() {}
StaticExample.staticProp = "Hello"
console.log(StaticExample.staticProp) // "Hello"
在这里,我创建了一个
function
,然后创建了一个静态变量staticProp
(尽管我们可以称其为静态)。这会将字段staticProp
添加到constructor
的StaticExample
的prototype
字段中问题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
,它是不同对象的不同属性。