Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   есть ли global в javascript (https://javascript.ru/forum/misc/1141-est-li-global-v-javascript.html)

scuter 06.04.2008 06:14

есть ли 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
чтобы решить такую проблему.

Kolyaj 06.04.2008 09:25

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

tenshi 06.04.2008 12:24

var grup_1= new function(){};

vasa_c 06.04.2008 20:21

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, объясните словами свои гениальные ответы.

Gvozd 06.04.2008 20:56

можно попробовать так.
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

Kolyaj 06.04.2008 21:55

Цитата:

Сообщение от vasa_c
Kolyaj, объясните словами свои гениальные ответы.

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

Gvozd, свойства объекта window != глобальные переменные.

Gvozd 06.04.2008 22:04

Цитата:

Сообщение от 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()

Kolyaj 06.04.2008 22:16

Цитата:

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

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

Цитата:

Сообщение от Gvozd
Если не верите, проверьте такую простейшую вещь

Найдите десять отличий между этой простейшей вещью и тем, что вы предложили в предыдущем сообщении (ну и заодно с тем, что я предложил два сообщения назад).

Gvozd 06.04.2008 22:33

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

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

ЗЫ. Так-то

Kolyaj 06.04.2008 23:07

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


Часовой пояс GMT +3, время: 22:18.