[英]How do I create a static member for an object in a namespace in JavaScript?
我在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
示例中,它与第二个示例实际上相同。 这意味着您需要确保首先发生功能分配。
函数声明被提升,也就是说,您可以在它们的实例化之上使用它们。 但是,函数表达式不是。 在您的示例中,您执行此操作:
Namespace.MyObject.staticVariable = "hello world";
Namespace.MyObject = function() {
// do something
}
这不起作用,因为Namespace.MyObject
不是(也不能)创建为函数声明。 至于模拟功能,请使用以下功能:
function add( prop, val ) {
Namespace.MyObject[ prop ] = val;
}
这将允许您在显式创建对象之前向对象添加属性:
add( "staticVariable", "Hello World" );
Namespace.MyObject = function() {
// do something
};
你能澄清静态类变量的含义吗? JavaScript与Java不同。
如果您想要一个没有客户端可以修改的常量,您可以使用闭包。 例如:
var Namespace = {};
Namespace.MyObject = (function(){
var staticVariable = "hello world";
//this will be assigned to "MyObject"
return {
someFunction: function() {
//refer to staticVariable here
//no client can modify staticVariable directly;
//only through the methods you provide
}
};
})();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.