这个question的解决方案建议使用John Resig的类实现。该解决方案涵盖了我的所有需求,除了:
如何在此类中声明可以从外部访问的公共全局变量?
我想建立如下内容:
var MyClass = Class.extend({
EVENT_NAME : 'event-name',
init : function() {
// ...
}
});
// Now another file can directly read this value without creating the class object
console.log( MyClass.EVENT_NAME );
答案 0 :(得分:4)
执行您想要做的事情的“唯一”方法是使用函数作为“类”。通过这种方式,您可以声明可以访问其公共“静态”成员的“类”。像这样:
function MyObject() {
// constructor stuff here
}
MyObject.EVENT_NAME = "event_name";
console.log(MyObject.EVENT_NAME); // No need to instantiate MyObject
然而,在我看来,你喜欢将静态类型语言的概念与Javascript更具动态性的东西混合在一起。为什么要访问尚未创建的对象的成员?
答案 1 :(得分:1)
在窗口上下文中声明它或不使用'var'关键字:
window.globalVar = somevalue
globalVar = somevalue
答案 2 :(得分:0)
var MyClass = Class.extend({
EVENT_NAME : 'event-name',
init : function() {
// ...
}
return {
event_name: function() { return EVENT_NAME; }
}
});
console.log( MyClass.event_name );
实际上,说实话,我不确定上述内容如何与.extend()
一起使用,因为之前我实际上并未使用extend()
。
但是,return { name:value }
技术是在对象中公开公共实例方法的一种非常常见的方法。不应该花很长时间才能正确测试它,对不起我没有机会亲自去做。