06.04.2008, 06:14
|
|
Профессор
|
|
Регистрация: 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
чтобы решить такую проблему.
|
|
06.04.2008, 09:25
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
var texting;
var grup_1 = ...
var grup_2 = new (function() {
texting = 'adfkajhdflkajdf';
...
})()
Последний раз редактировалось Kolyaj, 07.04.2008 в 11:18.
|
|
06.04.2008, 12:24
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
var grup_1= new function(){};
|
|
06.04.2008, 20:21
|
|
Профессор
|
|
Регистрация: 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, объясните словами свои гениальные ответы.
|
|
06.04.2008, 20:56
|
|
Матрос
|
|
Регистрация: 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
|
|
06.04.2008, 21:55
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от vasa_c
|
Kolyaj, объясните словами свои гениальные ответы.
|
Для тех, кто в танке: вы не поверите, но если переменную с помощью ключевого слова var объявить вне какой-либо функции или объекта, то эта переменная будет видна везде. Т.е. мой гениальный ответ как бы говорит, что нужно объявить переменную texting вне этих функций, тогда она будет доступна в обоих функциях, в то время как ваш гениальный ответ является всего лишь хаком к примеру и к глобальным переменным отношения не имеет никакого.
Gvozd, свойства объекта window != глобальные переменные.
|
|
06.04.2008, 22:04
|
|
Матрос
|
|
Регистрация: 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()
|
|
06.04.2008, 22:16
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Gvozd
|
Если его забыть, то переменная попадет в глобальный объект window
|
Все верно, т.е. станет свойством window, а не самостоятельной переменной, при этом, разумеется, будет везде доступна, вот только зачем засорять объект window?
Сообщение от Gvozd
|
Если не верите, проверьте такую простейшую вещь
|
Найдите десять отличий между этой простейшей вещью и тем, что вы предложили в предыдущем сообщении (ну и заодно с тем, что я предложил два сообщения назад).
|
|
06.04.2008, 22:33
|
|
Матрос
|
|
Регистрация: 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.
|
|
06.04.2008, 23:07
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Gvozd, я дико извиняюсь, но где вы тестировали ваши примеры? А то у меня первый код в 4-х браузерах выдает undefined, а второй false.
|
|
|
|