在Javascript中访问全局函数变量

时间:2010-12-28 15:08:49

标签: javascript variables namespaces

不知何故,我认为您可以将函数定义为全局变量并访问其内部变量。 例如:

var func = function(){
    var connected = true;
}

console.log(func.connected);

然而,这仍然是“未定义”。 我认为“命名”某些变量会很有趣。

我不想使用对象/列表/词典(您更喜欢如何调用它们),因为您可以delete这些元素。

5 个答案:

答案 0 :(得分:2)

这是不可能的。
事实上,它甚至没有意义 每次调用函数都会产生一组独立的局部变量。

您应该使用对象来创建命名空间,即使您可以delete它们。

如果你愿意,你也可以上课:
请注意,您需要创建类的实例

function MyClass() { 
    this.connected = true;
}

var myInstance = new MyClass();
console.log(myInstance.connected);

但是,您不应该使用类来创建单例命名空间;没有意义。

相反,你应该写

var myNamespace = { connected: true };

console.log(myNamespace.connected);

答案 1 :(得分:2)

函数内的

var使其成为私有的。使用this.connected = true将其公开。

var func = function(){
    this.connected = true;
}

PS - 据我所知,对象的所有属性都是可删除的,除非它们是不可枚举的,我认为你不能轻易指定。您应该使用this.connected,即使它是可删除的。

公共/私有方法和“特权”方法有一个很好的读数here

编辑:我认为你知道实例化..无论如何只需要x = new func来创建一个实例,然后x.connected

答案 2 :(得分:1)

使用var它是私有的。

像这样使用它:

var func = function(){
    this.connected = true;
}
var namespace = new func();

console.log(namespace.connected);

请记住它需要实例化。

答案 3 :(得分:0)

您可以使用这样的JSON表示法:

var func = {
   connected:true,
   func:function(){
     func.connected = true;
   }
}
console.log(func.connected);

答案 4 :(得分:0)

var MyClass = function() {
    function clazz() {
        this.message = "Hello"; //instance variable
    }

    clazz.connected = true; //static variable

    return clazz;
}();


alert(MyClass.connected)
alert(new MyClass().message)