2010-11-13 6 views
3

Как создать переменную изменения в качестве глобальной переменной?Javascript Глобальные переменные

так что-то вроде:

function globVar(variable){ 
    window.variable; 
} 

Итак, таким образом я мог бы создать глобальные переменные в автоматическом режиме тоже, а также я мог бы создать их для себя проще :)

EDIT

Например, я мог бы создать глобальную переменную: globVar('myVariable');, затем myVariable добавляется к глобальным переменным.

+0

«Глобальные переменные» * * (белые ложь) «атрибуты окна» (в контексте браузера). Что вы имеете в виду? – 2010-11-13 17:42:00

+0

Что такое myVariable, который должен равняться при вызове globVar ('myVariable')? – William

+0

@Lime - Ну не имеет значения, но по умолчанию должно быть «null». :) – Adam

ответ

10

К сожалению сказать, но ответы, которые вы получили плохие привычки, которые вы должны держаться подальше. A Лучшая практика программирования и, возможно, Практика программирования - это псевдопространство ваших глобальных переменных, чтобы не загромождать глобальное пространство имен/область. Обоснование этого заключается в том, чтобы сделать ваш код более управляемым и, что более важно, сделать жизнь проще для вас, если/когда ваше приложение станет большим. Простым механизмом определения пространства имен является использование шаблона модуля, прославленного Дугласом Крокфордом.

Вот простой пример:

var myNamespace = function(){ 
    var o = {}; 
    var globals = {}; 

    var setGlobVar = function(name, value) { 
    globals[name] = value; 
    }; 

    var getGlobVar = function(name) { 
    if (globals.hasOwnProperty(name)) { 
     return globals[name]; 
    } else { 
     // return null by default if the property does not exist 
     return null; 
    } 
    }; 

    o.setGlobVar = setGlobVar; 
    o.getGlobVar = getGlobVar; 
    return o; 
}(); 

Чтобы использовать эту функцию, вы просто назвать это как методы объекта.

myNamespace.setGlobVar("secret_msg", "Dumbledore dies, so does Hedwig"); 
myNamespace.getGlobVar("secret_msg"); 

Вы также можете выставить переменную globals вместо использования setGlobVar и getGlobVar методы, чтобы использовать его, если вы хотите, чтобы упростить вам доступ к переменной.


Дело в том, чтобы держаться подальше от определения переменных в глобальном пространстве имен (то есть window объект) как можно больше, путем создания пространства имен ваших собственных. Это уменьшает вероятность столкновений имен, случайно перезаписывает или переопределяет, и снова глобальное пространство пространства имен.

Еще один простой способ сделать это - просто определить объект и расширить его свойства.

var globals = {}; 
globals.SECRET_MSG = "Snape is not a traitor" 

Хотя я бы этот подход, обернув globals в пространство имен, специфичные для моего приложения.

var myNamespace = {}; 
myNamespace.globals = {}; 
myNamespace.globals.SECRET_MSG = "Snape is not a traitor" 

ПРИМЕЧАНИЕ: Это на самом деле так же, как оригинальный модуль-шаблон подход, который я предложил, только без методов get и set аксессоров и закодированных по-разному.

+0

Хм это тоже выглядит интересно, но я не очень понимаю все это :), Как я должен использовать это?: \ Но как я понял переменные, что я хотел добавить в 'window' для создания глобальной переменной, вы говорите, что я должен добавить ее к другой переменной? например, 'globalVars.variable'? – Adam

+0

Так будет работать. Дело в том, чтобы держаться подальше от определения переменных в глобальном пространстве имен (т. Е. Объекта 'window'), создавая собственное пространство имен. Метод, который я предложил выше, может быть чрезмерным для того, что вам нужно, но стоит узнать, планируете ли вы разработку Javascript. – John

+0

Добавлен более подробно мой ответ внизу. – John

0

window.variable = переменная;

Не понимаю, что такое «автоматический режим», поэтому это может не так, как вы хотели.

+0

Я показываю вам функцию, но я не думаю, что это сработает :), но я хотел бы иметь такой способ, например, я мог бы создать глобальную переменную, как это: 'globVar ('myVariable'); 'then' myVariable' добавляется к глобальным переменным. – Adam

+0

Нет необходимости «добавлять» его к глобальным переменным - когда вы делаете 'window.variable = 123;', вы назначаете значение, которое вы собираетесь использовать с этого момента. –

+0

Если вы просто хотите получить данные, установленные пользователями, вы можете использовать что-то вроде: 'window.variablesFromUsers = {};'. Тогда ваши пользователи могут сделать что-то вроде: 'window.variablesFromUsers ['abc'] = 123;' и вы сможете получить его таким же образом: 'window.variablesFromUsers ['abc']' даст вам 123. Если вы хотите получить все переменные, заданные пользователями, вы можете сделать: 'for v in window.variablesFromUsers' и в цикле получить все имена ('abc' в предыдущем примере), а затем сделать' window.variablesFromUsers [o] 'для получения содержимого (123 в примере). Надеюсь это поможет. –

1

Вызов функции, как globVar('myVar','myVarValue')

function globVar(variable,value){ 
    window[variable] = value; 
} 

Вот jsfiddle: http://jsfiddle.net/emQQm/

+0

hmm выглядит интересно, дайте мне попробовать;) – Adam

+0

Я добавил jsfiddle: http://jsfiddle.net/emQQm/ – William

+0

Конечно, вопрос в том, почему это имеет значение? Почему бы не просто написать 'window [variable] = value' и сделать с ним? – Zecc