Доступ к глобальным переменным функции в Javascript - PullRequest
1 голос
/ 28 декабря 2010

Почему-то я думал, что вы можете определить функцию как глобальную переменную и получить доступ к ее внутренним переменным.Пример:

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

console.log(func.connected);

Однако, это все равно выглядит как «неопределенное».Я подумал, что было бы интересно «пространство имен» определенным переменным, как это.

Я не хочу использовать объекты / списки / словари (как вы предпочитаете их называть), потому что вы можете delete эти элементы.

Ответы [ 5 ]

2 голосов
/ 28 декабря 2010

var внутри функции делает ее закрытой. используйте this.connected = true, чтобы сделать его публичным.

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

PS - Насколько я знаю, все свойства объекта могут быть удаляемыми, если они не перечисляемы, что я не думаю, что вы можете легко указать. Вы должны использовать this.connected, даже если его можно удалить.

Здесь хорошее чтение здесь о публичных / приватных методах и "привилегированных" методах.

РЕДАКТИРОВАТЬ: Я предполагал, что вы знали о создании экземпляров ... в любом случае просто сделайте x = new func, чтобы создать экземпляр, затем x.connected.

2 голосов
/ 28 декабря 2010

Это невозможно.
На самом деле это даже не имеет смысла.
Каждый вызов функции создает отдельный набор локальных переменных.

Вы должны использовать объекты для созданияпространства имен, даже если вы можете delete их.

Если вы хотите, вы также можете создать класс:
Обратите внимание, что вам нужно создать экземпляр класса:

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

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

Однако не следует использовать классы для создания одноэлементных пространств имен;нет смысла.

Вместо этого вы должны написать

var myNamespace = { connected: true };

console.log(myNamespace.connected);
1 голос
/ 28 декабря 2010

с помощью var это личное.

используйте это так:

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

console.log(namespace.connected);

помните, что его нужно создать.

0 голосов
/ 28 декабря 2010
var MyClass = function() {
    function clazz() {
        this.message = "Hello"; //instance variable
    }

    clazz.connected = true; //static variable

    return clazz;
}();


alert(MyClass.connected)
alert(new MyClass().message)
0 голосов
/ 28 декабря 2010

Вы можете использовать нотацию JSON следующим образом:

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