2013-05-14 2 views
0

Я вижу это довольно часто, но я не уверен в его цели или в чем преимущества (если таковые имеются). Размещение функции или наборов функций внутри объекта в качестве значения для переменной.Размещение функций JavaScript внутри объекта переменной

var variableName = { (function() {DO STUFF})} 

ответ

0

JavaScript использует глобальные переменные. Это означает, что каждый скрипт cann получает доступ и изменяет все переменные и может переписывать переменные с тем же именем. Чтобы защитить свой собственный скрипт, вы можете использовать глобальную переменную (например, var MyScript = ...) и записать в нее все. Чтобы привести пример, я написал простой скрипт для перемещения между html-файлами. Вы можете увидеть переменную под названием «Navi», которая заполняет все содержимое внутри. Он содержит переменные и функции и (в этом случае) доступ разрешен только возвращенными именами. Если я написал функции next и previous из Navi, они могут быть перезаписаны в некоторых других сценариях.

var Navi = (function(){ 
    var currentPage = 0; 
    var pages = []; 
    pages[0] = "first.html"; 
    pages[1] = "second.html"; 
    pages[2] = "third.html"; 

    var next = function next(){ 
     if(currentPage < pages.length - 1){ 
      currentPage++; 
      location.href = pages[currentPage]; 
     } 
    }; 

    var previous = function previous(){ 
     if(currentPage > 0){ 
      currentPage--; 
      location.href = pages[currentPage]; 
     } 
    }; 

    return{ 
     next: next, 
     previous: previous, 
     currentPage: currentPage, 
     pages: pages 
    }; 
})(); 

Для вызова из HTML файла:

<a href="javascript:Navi.previous();">previous page</a> 
<a href="javascript:Navi.next();">next page</a> 

До сих пор.

+0

Сценарий может изменять все переменные? Можете ли вы уточнить. – specialscope

+0

Значит, это просто функция безопасности, например, в процедурном программировании, где вы можете назначить классы частным? Кроме того, разрешено ли другим скриптам изменять глобальную переменную, чтобы все было обернуто внутри, тем самым сломав все? –

+0

@specialscope: Насколько я знаю, JS-анализаторы работают сверху документа. Переменные/функции/объекты и т. Д. Будут перезаписаны, если они объявлены в другое время с тем же именем. . мы используем два сценария: '

0

В принципе, если функция имела имя, которое вы могли бы назвать его

variableName.function (арг);

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

Вы можете сделать одноэлементный объект вроде этого:

var Singleton = { 

    data1 : '', 

    functionName : function() { 

     this.data1 = document.getElementById('formfield1').value;  

    } 

} 

так что если у вас есть поле формы с идентификатором formfield1

<input type="text" id="formfield1" value="" /> 

когда вы связываете эту функцию на кнопку отправки, например

<button onclick="Singleton.functionName();">Save</button> 

Ваша информация будет сохранена в переменной data1 объекта.

Существует много больше, чем это, но это хороший способ сохранения данных, надеюсь, что это помогло :)

Смежные вопросы