javascript - 如何在 JavaScript 中为 namespace 中的对象创建静态成员?

标签 javascript namespaces static-members oop

我在 Javascript 中模拟了一个静态类变量。

MyObject.staticVariable = "hello world";

function MyObject() {
    // do something
}

MyObject.prototype.someFunction = function() ...

我不明白为什么这种语法有效,因为在我分配 staticVariable 属性之前我没有显式创建 MyObject(我怎么可能仍然有一个 MyObject 函数?)。但它确实有效,而且我在许多问题的答案中看到了它:如何在 Javascript 中模拟静态类变量?

当我在命名空间中声明 MyObject 函数时,如何实现此功能?

var Namespace = {};

// Not allowed, and for good reason in my eyes, as NameSpace.MyObject does not exist
Namespace.MyObject.staticVariable = "hello world";

Namespace.MyObject = function() {
    // do something
}

Namespace.MyObject.prototype.someFunction = function() ...

如果我可以澄清和/或我的想法是否正确,请告诉我。谢谢。

最佳答案

函数声明被“提升”到当前词法环境的顶部。

这意味着该函数在该环境中的任何其他代码运行之前就已存在。

// This works

MyObject.staticVariable = "hello world";

function MyObject() {
    // do something
}

// This does not

MyObject.staticVariable = "hello world";

var MyObject = function() {
    // do something
}

在您的 Namespace 示例中,它实际上与第二个示例相同。这意味着您需要确保首先发生函数分配。

关于javascript - 如何在 JavaScript 中为 namespace 中的对象创建静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052904/

相关文章:

javascript - 如何使用 JavaScript 测量动画发生的时间

javascript - Angular promise 从 JSON API 返回不正确的数据

r - 数据未从 R 中的命名空间导出

c++ - 请先实例化 QApplication 对象

c++ - 如何实例化对象的静态 vector ?

javascript - 捕获粘贴事件/粘贴的 html - javascript

javascript - 仅使用 Javascript 更正删除后的行的序列号

C++11 内联命名空间与直接在封闭命名空间中嵌入类型

c# - 根据目录结构重新组织命名空间

c++ - 初始化 QList<MyStruct> 作为静态类成员给出 LNK2001 错误