Подтвердить что ты не робот

Сохранение переменной в объекте JavaScript "window" является правильным способом использования этого объекта?

(Возможно) Я только что решил свою проблему (Как обновить содержимое переднего плана после того, как форма успешно отправлена ​​из диалогового окна?) путем "сохранения" / "сохранение" переменной в объекте JavaScript window. Однако, поскольку я новичок в вопросах JavaScript, у меня есть некоторые сомнения в том, что сохранение/сохранение переменной в объекте JavaScript window является "обычным" / "правильным" способом использования этого объекта. Это?

Например, используя следующий код

$('.trigger').click(function() {
  window.trigger_link = this;
});

целесообразно?

4b9b3361

Ответ 1

В JavaScript любая глобальная переменная на самом деле является свойством объекта window. Использование одного эквивалентно (и взаимозаменяемому) с использованием другого.

Использование глобальных переменных, безусловно, является "общим", поэтому вопрос заключается в том, является ли он "правильным". Как правило, глобальные переменные обескуражены, поскольку к ним можно получить доступ из ЛЮБОЙ функции, и вы рискуете иметь несколько функций, которые пытаются читать и записывать в одни и те же переменные. (Это верно для любого языка программирования в любой среде, а не только для JavaScript.)


Решите эту проблему, создав пространство имен, уникальное для вашего приложения. Самый простой способ - создать глобальный объект с уникальным именем, а ваши переменные будут свойствами этого объекта:

window.MyLib = {}; // global Object container; don't use var
MyLib.value = 1;
MyLib.increment = function() { MyLib.value++; }
MyLib.show = function() { alert(MyLib.value); }

MyLib.value=6;
MyLib.increment();
MyLib.show(); // alerts 7

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

Ответ 2

Другой шаблон для создания уникального пространства имен в вашем приложении.

function myApp()
{
    var value = 5;
    function addToValue(x)
    {
         value += x;
    }
}()

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

function myApp()
{
    this.value = 5;
    this.addToValue = function(x)
    {
         this.value += x;
    }
}
var myInstance = new myApp();