Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.04.2008, 06:14
Аватар для scuter
Профессор
Отправить личное сообщение для scuter Посмотреть профиль Найти все сообщения от scuter
 
Регистрация: 14.03.2008
Сообщений: 169

есть ли 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
чтобы решить такую проблему.
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2008, 09:25
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

var texting;
var grup_1 = ...
var grup_2 = new (function() {
  texting = 'adfkajhdflkajdf';
  ...
})()

Последний раз редактировалось Kolyaj, 07.04.2008 в 11:18.
Ответить с цитированием
  #3 (permalink)  
Старый 06.04.2008, 12:24
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

var grup_1= new function(){};
Ответить с цитированием
  #4 (permalink)  
Старый 06.04.2008, 20:21
Аватар для vasa_c
Профессор
Отправить личное сообщение для vasa_c Посмотреть профиль Найти все сообщения от vasa_c
 
Регистрация: 12.03.2008
Сообщений: 183

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, объясните словами свои гениальные ответы.
Ответить с цитированием
  #5 (permalink)  
Старый 06.04.2008, 20:56
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

можно попробовать так.
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
Ответить с цитированием
  #6 (permalink)  
Старый 06.04.2008, 21:55
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от vasa_c
Kolyaj, объясните словами свои гениальные ответы.
Для тех, кто в танке: вы не поверите, но если переменную с помощью ключевого слова var объявить вне какой-либо функции или объекта, то эта переменная будет видна везде. Т.е. мой гениальный ответ как бы говорит, что нужно объявить переменную texting вне этих функций, тогда она будет доступна в обоих функциях, в то время как ваш гениальный ответ является всего лишь хаком к примеру и к глобальным переменным отношения не имеет никакого.

Gvozd, свойства объекта window != глобальные переменные.
Ответить с цитированием
  #7 (permalink)  
Старый 06.04.2008, 22:04
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Kolyaj
Gvozd, свойства объекта window != глобальные переменные.
вот тут написано обратное
http://javascript.ru/tutorial/basic/...asti-vidimosti
Цитата:
Ключевое слово var задает переменную в текущей области видимости. Если его забыть, то переменная попадет в глобальный объект window
Более того код приведенный мной работает в Opera 9.23 ,Explorer 6 ,Mozila 5
Если не верите, проверьте такую простейшую вещь
var asd='Hello'
function zxc()
{
alert(asd)
}
zxc()
Ответить с цитированием
  #8 (permalink)  
Старый 06.04.2008, 22:16
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Gvozd
Если его забыть, то переменная попадет в глобальный объект window
Все верно, т.е. станет свойством window, а не самостоятельной переменной, при этом, разумеется, будет везде доступна, вот только зачем засорять объект window?

Сообщение от Gvozd
Если не верите, проверьте такую простейшую вещь
Найдите десять отличий между этой простейшей вещью и тем, что вы предложили в предыдущем сообщении (ну и заодно с тем, что я предложил два сообщения назад).
Ответить с цитированием
  #9 (permalink)  
Старый 06.04.2008, 22:33
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сорри, опечатался. ))))
var asd='Hello'
function zxc()
{
alert(window.asd)
}
zxc()

Более того, вот такая конструкция всегда выдает true.с чего бы?))
var asd='Hello'
function zxc()
{
alert(window.asd==asd)
}
zxc()

ЗЫ. Так-то

Последний раз редактировалось Gvozd, 06.04.2008 в 22:43.
Ответить с цитированием
  #10 (permalink)  
Старый 06.04.2008, 23:07
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Gvozd, я дико извиняюсь, но где вы тестировали ваши примеры? А то у меня первый код в 4-х браузерах выдает undefined, а второй false.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лучшая книга по JavaScript Systemnik Оффтопик 27 26.08.2012 16:54
В Mozilla Firefox 3.0 проблемма с Javascript меню artmedia Элементы интерфейса 1 07.09.2008 10:43
Обращение к именам, полученным через Javascript baal1988 Events/DOM/Window 1 31.08.2008 15:08
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43
Изменение onClick из Javascript Александр Events/DOM/Window 5 01.05.2008 16:44