 
			
				02.04.2016, 18:35
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.05.2013 
					
					
					
						Сообщений: 111
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				объекты и работа с ними
			 
			
		
		
		
		просьба сильно не пинать, а объяснить и/или дать ссылку на хороших мануал, только пытаюсь разобраться с ООП
есть объект имеющий древовидную структуру:
 
obj={
   func:{
      msg1: 'fm1...',
      msg2: 'fm2...',
      msg3: 'fm3...',
      msg4: 'fm4...',
      showF: showMsg
   },
   errs:{
      msg1: 'em1...',
      msg2: 'em2...',
      msg3: 'em3...',
      msg4: 'em4...',
      showE: showMsg
   },
   // и так далее
   show: showMsg
};
function showMsg(m){
   alert(m)
}
obj.show(obj.func.msg3)
как переделать этот код, чтобы: 
можно было обратиться сразу к внутреннемому объекту (например, к func) и в параметрах, указывать не полный идентификатор объекта (obj.func.msg3), а только последний (msg3), т.е. как-то так:
 
obj.showF('msg3')
с передачей значения/указателя (msg3) - пробовал через this в функции showMsg() но видимо, не до конца понимаю куда, что ссылается, в итоге, получаю ссылку на объект, вместо текста сообщения  
с изменением имени (obj.func.showF на obj.showF) - вообще не получилось, видимо, как-то не правильно создаю указатель  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Cache, 02.04.2016 в 18:55.
				Причина: коммент
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 19:40
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.05.2013 
					
					
					
						Сообщений: 111
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		как изменить имя - вроде бы разобрался (в принципе-то, банально), но получилось только вне объекта: 
obj.showF=obj.func.showF;
 
а хотелось бы - изнутри, но конструкция вида:
 
obj.showF: obj.func.showF
 
возвращает ошибку  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Cache, 02.04.2016 в 19:44.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 21:21
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 18.05.2011 
					
					
					
						Сообщений: 1,207
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		как переделать этот код, чтобы: 
можно было обратиться сразу к внутреннемому объекту (например, к func) и в параметрах, указывать не полный идентификатор объекта (obj.func.msg3), а только последний (msg3), т.е. как-то так: 
obj.showF('msg3')
	 | 
 
	
 
 
obj={
   func:{
      msg1: 'fm1...',
      msg2: 'fm2...',
      msg3: 'fm3...',
      msg4: 'fm4...'
   },
   errs:{
      msg1: 'em1...',
      msg2: 'em2...',
      msg3: 'em3...',
      msg4: 'em4...'
   },
   // и так далее
   showF: showMsg
};
obj.showF = obj.showF.bind(obj.func);
function showMsg(m){
   alert(this[m])
}
obj.showF('msg3');
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 21:27
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.04.2016 
					
					
					
						Сообщений: 50
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
obj={
   func:{
      msg1: 'fm1...',
      msg2: 'fm2...',
      msg3: 'fm3...',
      msg4: 'fm4...',
   },
   errs:{
      msg1: 'em1...',
      msg2: 'em2...',
      msg3: 'em3...',
      msg4: 'em4...',
   },
   // и так далее
   showF: showF,
   showE: showE
};
 
function showF(m){
   alert(this.func[m])
}
function showE(m){
   alert(this.errs[m])
}
 
obj.showE("msg3"); obj.showF("msg4")
так штоле?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 22:05
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.05.2013 
					
					
					
						Сообщений: 111
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 protoquest, да, вроде бы так, спасибо 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 22:07
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.05.2013 
					
					
					
						Сообщений: 111
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		protoquest, 
 а возможно - без указания this. func[m] в функции? т.е. как-то так:
 
function showE(m){
    alert(this[m])
}
? 
а в оптимале, чтобы была вообще одна функция, а в зависимости от места вызова применялся - нужный контекст 
т.е. если вызвано из объекта  obj.func то и контекст брался этого объекта  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Cache, 02.04.2016 в 22:11.
				Причина: добавлено пояснение
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 22:11
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.04.2016 
					
					
					
						Сообщений: 50
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Cache, 
 хотя, возможно, через жопу сделать, используя bind, но не нужно. У Вас на самом деле нет четкого понимания, чего Вы на самом деле хотите.
 
obj={
   func:{
      msg1: 'fm1...',
      msg2: 'fm2...',
      msg3: 'fm3...',
      msg4: 'fm4...',
   },
   errs:{
      msg1: 'em1...',
      msg2: 'em2...',
      msg3: 'em3...',
      msg4: 'em4...',
   },
   // и так далее
};
obj.showF = show.bind(obj.func)
obj.showE = show.bind(obj.errs)
 
function show(m){
   alert(this[m])
}
 
obj.showE("msg3"); obj.showF("msg4")
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось protoquest, 02.04.2016 в 22:16.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 22:15
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.05.2013 
					
					
					
						Сообщений: 111
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 destus, 
 спасибо, не увидел ваш ответ сразу - то что нужно 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 22:18
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.05.2013 
					
					
					
						Сообщений: 111
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от protoquest
			
		
	 | 
 
	| 
		У Вас на самом деле нет четкого понимания, чего Вы на самом деле хотите.
	 | 
 
	
 
 да, это действительно так, сейчас экспериментирую, пытаясь понять, как лучше сделать и как именно это можно использовать, потому что - данный способ - легко заменяется  
showMsg(obj.func.msg3)
 вот и пытаюсь понять плюсы и минусы метода, и его удобства  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 22:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.05.2013 
					
					
					
						Сообщений: 111
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от protoquest
			
		
	 | 
 
	| 
		хотя, возможно, через жопу сделать, используя bind, но не нужно
	 | 
 
	
 
 а можно по конкретней, почему через "жопу"?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |