gpt4 book ai didi

javascript - JavaScript 中静态变量的工作

转载 作者:行者123 更新时间:2023-11-28 16:53:27 25 4
gpt4 key购买 nike

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

function StaticExample() {}

StaticExample.staticProp = "Hello"

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

在这里,我创建了一个函数,然后创建了一个静态变量staticProp(尽管我们可以将其称为静态)。这会将字段 staticProp 添加到 StaticExampleprototype

上的 constructor 字段

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

现在构造函数重写如下。

StaticExample.prototype.constructor = {}

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

即使在那之后,当我尝试访问 StaticExample.staticProp 时,它仍然提供了 Hello 的正确值

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

最佳答案

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,它是不同对象的不同属性。

关于javascript - JavaScript 中静态变量的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59646486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com