 
			
				24.06.2017, 16:14
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Вывести имя полученной функции
			 
			
		
		
		
		Есть функция ( не работает ): 
function showName(f){
  var fName=f.name;
  alert(fName); // 'Rain'
}
function Rain(){
  showName(this); // отправим себя
}
Rain()
Дополнение
Мне кажется туповато писать имя функции и обращаться к нему:
 https://developer.mozilla.org/ru/doc.../Function/name
Понимаю, если имя функции не известно и мы хотим узнать его, как в моем вопросе, а тут получается типа:
 
showName.name // showName 
или 
Тимур.имя // Тимур
 
Мда...
 
А  Function.caller не стандартно. Эх...  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Teamur, 24.06.2017 в 16:19.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.06.2017, 09:10
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Teamur, ты никогда не узнаешь имя функции, передавая ее как параметр в другую функцию...    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.06.2017, 18:06
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		ksa, 
А если так:
 
function showName(f){
alert(f+'');
}
Возможно так получится, но не могу проверить, с планшета  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.06.2017, 18:13
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 ksa, 
слушай, я в регулярках вообще не шарю, как мне получить содержимое первой скобки, дс как получить параметры из строки-функции? 
Смотрел варианты в сети, но там какие-то длинющие регулярки для простого получения содержимого между скобками. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.06.2017, 08:22
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Teamur
			 
		
	 | 
 
	
		ksa, 
А если так: 
function showName(f){
alert(f+'');
}
	 | 
 
	
 
 Имя функции тут "f"...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.06.2017, 08:23
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Teamur
			
		
	 | 
 
	| 
		как мне получить содержимое первой скобки, дс как получить параметры из строки-функции?
	 | 
 
	
 
 Приведи пример той строки... Потом расскажи чего из нее хочешь получить...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.06.2017, 17:29
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.01.2015 
					
					
					
						Сообщений: 622
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
function getFunctionName(func) {
	if(typeof func === 'function') {
  	const funcNameArr = /^\s*function\s*([^\(]*).*/i.exec(func.toString());
    if(funcNameArr && funcNameArr[1]) {
    	return funcNameArr[1];
    } else {
    	return 'anonymous';
    }
  } else {
  	throw new Error('That\'s not function');
  }
}
function example(a) {
	console.log('example function', a);
}
var d = () => {};
console.log(getFunctionName(example));
console.log(getFunctionName(d));
Правда с точки зрения практики, в этом особого смысла нет. Если вы конечно не собираетесь делать всякие разные проверки на имя входящей функции. Ну и изначальная конструкция с this работать не будет. Так как this это  контекст функции, и он обычно не совпадает с самой функцией.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось EmperioAf, 27.06.2017 в 17:42.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.06.2017, 19:04
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		ksa,
 
function showName(f){alert(f+'')};
function MyFn(a,b=1,c=7){};
showName(MyFn);
Поучил строку: 
"function MyFn(a,b=1,c=7){}"
 
Какую надо придумать регулярку, чтобы: 
1) получить всё что после первого пробела (после "function ") 
2) отсечь всё что после первой закрывающей скобки 
3) разбить "MyFn(a,b=1,c=7)" на две части: "MyFn" и "(a,b=1,c=7)" 
4) из второй части убрать скобки, нап. так: "(a,b=1,c=7)".slice(1,-1) 
5) вернуть массив ["MyFn","a,b=1,c=7"] или объект {fn:"MyFn",args:"a,b=1,c=7"}
 
Аргументы я потом получу через split(','). 
Вот такие мысли.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.06.2017, 19:58
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.01.2015 
					
					
					
						Сообщений: 622
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
function getFunctionName(func) {
	if(typeof func === 'function') {
  	var funcNameArr = /^\s*(?:function)?\s*([^\(]*)\s*\((.*?)\)(?:\s*\{|\s*\=\>\s*\{?).*/gmi.exec(func.toString());
    if(funcNameArr) {
    	return {
							funcName: funcNameArr[1] || 'anonymous',
							params: funcNameArr[2]
			}
    }
  } else {
  	throw new Error('That\'s not function');
  }
}
function example(a = {1:2, 2:3}, b=6, {d: d}, c) {
	console.log('example function', a);
}
var d = (c = 2, {a}) => {};
function  p(a, b=')', d = '{') { function o(){console.log('albert')}}
function MyFn(a,b=1,c=7){};
function s(a=')')
{
}
console.log(getFunctionName(example)); // {funcName: "example", params: "a = {1:2, 2:3}, b=6, {d: d}, c"}
console.log(getFunctionName(d)); // {funcName: "anonymous", params: "c = 2, {a}"}
console.log(getFunctionName(MyFn)); // {funcName: "MyFn", params: "a,b=1,c=7"}
console.log(getFunctionName(p)); // {funcName: "p", params: "a, b=')', d = '{'"}
console.log(getFunctionName(s)); // {funcName: "s", params: "a=')'"}
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось EmperioAf, 28.06.2017 в 00:45.
				Причина: поправил жадность параметров, сейчас вроде более общий случай
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.06.2017, 23:56
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
console.log(EmperioAf.isMaster()); // -> true
 
Спасибо!  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |