есть ли global в javascript
всем здравствуйте,
есть 2 объекта из одного в другой переносятся функции примерно так grup_1 = new (function(){ this.methot_1 = function(url) { alert(texting+url); } this.methot_2 = function() { alert(texting); } })(); grup_2 = new (function(){ var texting = 'sdjfskdjfhskdjfhsk'; this.methot_1 = grup_1.methot_1; this.methot_2 = grup_1.methot_2; })(); <input type="button" onclick="grup_2.methot_1('picture');" value="alert"> в этом случае пишется что texting - определение отсутствует скажите есть ли функция что то вроди global в javascript чтобы решить такую проблему. |
var texting; var grup_1 = ... var grup_2 = new (function() { texting = 'adfkajhdflkajdf'; ... })() |
var grup_1= new function(){}; |
scuter, если вы имеете ввиду global из PHP, то это не функция и в вашем случае никаким образом вам не поможет. Имхо, вы просто не понимаете основ замыканий в JS.
В вашем случае есть два варианта для решения: Вариант раз: grup_1 = new (function(){ this.methot_1 = function(url) { alert(this.texting+url); } this.methot_2 = function() { alert(this.texting); } })(); grup_2 = new (function(){ this.texting = 'sdjfskdjfhskdjfhsk'; this.methot_1 = grup_1.methot_1; this.methot_2 = grup_1.methot_2; })(); Вариант два: объяснить что вы хотели сделать столь хитровывернутым кодом и попробовать найти более простое решение. Kolyaj, tenshi, объясните словами свои гениальные ответы. |
можно попробовать так.
grup_1 = new (function(){ this.methot_1 = function(url) { alert(texting+url); } this.methot_2 = function() { alert(texting); } })(); grup_2 = new (function(){ //Если в глобальной области видимости нет переменной, ... if(window.texting==undefined) window.texting //... то создаем ее /*теперь внутри ЛЮБОЙ функции она доступна под именем `texting`, *при условии, что ты не перекроеш ее внутри функции конструкцией *вида `var texting` */ texting = 'sdjfskdjfhskdjfhsk'; this.methot_1 = grup_1.methot_1; this.methot_2 = grup_1.methot_2; this.methot_2() //пробный вызов })(); В коде самом вроде подробно все разъяснил. Таким образом global $qwe /\ || \/ if(window.qwe==undefined) window.qwe |
Цитата:
Gvozd, свойства объекта window != глобальные переменные. |
Цитата:
http://javascript.ru/tutorial/basic/...asti-vidimosti Цитата:
Если не верите, проверьте такую простейшую вещь var asd='Hello' function zxc() { alert(asd) } zxc() |
Цитата:
Цитата:
|
Сорри, опечатался. ))))
var asd='Hello' function zxc() { alert(window.asd) } zxc() Более того, вот такая конструкция всегда выдает true.с чего бы?)) var asd='Hello' function zxc() { alert(window.asd==asd) } zxc() ЗЫ. Так-то |
Gvozd, я дико извиняюсь, но где вы тестировали ваши примеры? А то у меня первый код в 4-х браузерах выдает undefined, а второй false.
|
Тестировал свои примеры я под следующими браузерами:
Opera 9.23 ,Explorer 6 ,Mozila 5, под Windows И оба моих последних примера отрабатывают там именно так, как я описал. можете назвать свои браузеры, с версиями, чтоб я мог посмотреть как в них отрабатывается этот момент. |
Kolyaj, вы не поверите, я в курсе про "var", предлагаю избавится в нашей беседе от подобных саркастических пассажей.
Только человек пытается использовать что-то вроде ООП, какие там могут быть глобальные переменные? Тогда уж и просто функции можно использовать. Ваш пример будет работать так как нужно в данном конкретном случае, но по большому счету только запутает. |
Цитата:
Цитата:
Вопрос звучал про глобальные переменные, ответ соответствующий. По вашему примеру: вы считаете, что свойства одного класса, используемые в другом классе, как родные, не приведут к путаннице? |
Gvozd, IE 6, Opera 9, FF 2, Safari 3.1.
|
Цитата:
Обратите внимание там используются методы и свойства одного объекта - grup_2. Правда, описание "методов" первоначально сделано в конструкторе grup_1. Вот зачем такие выкрутасы и хотелось бы узнать у автора прежде чем давать ответы. |
Цитата:
|
а давайте вы не будете тут решать задачу, которую здесь никто не ставил?
|
tenshi, а какая задача, по вашему, была поставлена, что вы дали на нее столь глубокомысленный, лаконичный и исчерпывающий ответ
Цитата:
Нет, я конечно вижу ваши подобные ответы через тему и просто не обращаю на них внимания, но когда "и эти люди запрещают нам ковыряться в носу"... |
прокачай мудрость до 10-го левела - тогда поймёшь.
|
Что же, тролли на этом форуме уже завелись.
Есть ли тут уже модераторы? |
есть народное поверие: первое обвинение в троллинге звучит от самого злобного тролля.
|
уау, какая бурная беседа вышла,
а я всё пропустил, Gvozd и vasa_c - большое спасибо. я заметил интересную функцию, правда не понял что она означает, но мне кажется она делает похожую вещ, prototype('Object') |
Часовой пояс GMT +3, время: 20:05. |