Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вызов функции из функции (https://javascript.ru/forum/events/50115-vyzov-funkcii-iz-funkcii.html)

devastor 12.09.2014 16:04

Вызов функции из функции
 
//вызов главной функции, когда карта готова
ymaps.ready(init);
//главная функция 
function init() {
	//здесь описание всех функций
	function func1(){
	//тело
	}
	function func2(){
	//тело
	}
	function funcN(){}
}

При использовании api яндекс карт от функции "init()" отказаться нельзя, но при этом есть необходимость обращаться к func1(), func2() вне функции "init()", как это возможно сделать?
Это читал не помогло!
При чем функцию по событию можно вызвать следующим образом:
//вызов главной функции, когда карта готова
ymaps.ready(init);
//главная функция 
function init() {
	document.getElementById('id').[событие] = function(){
			//тело
		}
}

Но если одну и ту же функцию нужно вызывать по нескольким событиям - то такой способ не удобен
Быть может есть что то вроде, это могло бы упростить задачу:
document.getElementById('id1').[событие] || 
(document.getElementById('id2').[событие]) = function(){
			//тело
		}

Спасибо за внимание, надеюсь на помощь - очень хочется разобраться1

ksa 12.09.2014 16:24

Цитата:

Сообщение от devastor (Сообщение 330241)
Это читал не помогло!

Там такой вариант предлагали...

/* так создать */
var o=new init();
/* так вызывать */
o.func1run();
o.func2run();
//главная функция 
function init() {
	//здесь описание всех функций
	function func1(){
		//тело
		alert(1)
	};
	/* это нужно дописать */
	this.func1run = func1;
	function func2(){
		//тело
		alert(2);
	};
	/* это нужно дописать */
	this.func2run = func2;
};

ksa 12.09.2014 16:25

Но предупреждали! :stop:

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 68493)
А this (при вызове как функция, а не конструктор) = window. Вот и загрязняем глобальное пространство имен.


devastor 12.09.2014 17:06

Цитата:

Сообщение от ksa (Сообщение 330249)
Вот и загрязняем глобальное пространство имен

А чем это чревато? Есть какие то минусы от загрязнения глобального пространства, кроме путаницы в названиях?

Aetae 12.09.2014 17:12

Есть какие то минусы от загрязнения комнаты, кроме того что можешь вляпаться в грязь?

devastor 12.09.2014 17:14

Цитата:

Сообщение от Aetae (Сообщение 330268)
Есть какие то минусы от загрязнения комнаты, кроме того что можешь вляпаться в грязь?

Если вопрос не риторический, то да есть много(болезни, развитие инфекций, плесень), а можно поконкретней - чем это чревато, гугл партизанит(
Нашёл, что могут быть проблемы ещё с подключаемыми библиотеками, спасибо)

Aetae 12.09.2014 17:18

Если ты пишешь код один - то почти никаких.
Если же используются сторонние скрипты или код пишет кто-то ещё, то могут возникнуть коллизии. В лучшем случае код перестанет работать, в худшем - неуловимые баги.

devastor 12.09.2014 17:23

Цитата:

Сообщение от Aetae (Сообщение 330271)
Если ты пишешь код один - то почти никаких.
Если же используются сторонние скрипты или код пишет кто-то ещё, то могут возникнуть коллизии. В лучшем случае код перестанет работать, в худшем - неуловимые баги.

Ясно спасибо, к сожалению пишу не один, придётся придумывать сложные имена функций :D

Aetae 12.09.2014 17:50

Ну чтоб не загрязнять глобальную область можно просто ограничиться своей функцией:
(function(){
    var func1, func2, funcN;
    ymaps.ready(init);
    //главная функция
    function init() {
        //здесь описание всех функций
        func1 = function func1(){
            //тело
        }
        func2 = function func2(){
        //тело
        }
        funcN = function funcN(){}
    }
}());
Только, само собой, надо учитывать, что пока ymaps не загрузится и не запустит init - функции доступны не будут.

BETEPAH 12.09.2014 17:53

Цитата:

Сообщение от devastor
придётся придумывать сложные имена функций

как вариант, создать свой глобальный объект и собирать свои функции и переменные в нём.


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