Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.04.2016, 18:35
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 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. Причина: коммент
Ответить с цитированием
  #2 (permalink)  
Старый 02.04.2016, 19:40
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

как изменить имя - вроде бы разобрался (в принципе-то, банально), но получилось только вне объекта:
obj.showF=obj.func.showF;

а хотелось бы - изнутри, но конструкция вида:
obj.showF: obj.func.showF

возвращает ошибку

Последний раз редактировалось Cache, 02.04.2016 в 19:44.
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2016, 21:21
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 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');
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2016, 21:27
Аспирант
Посмотреть профиль Найти все сообщения от protoquest
 
Регистрация: 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")

так штоле?
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2016, 22:05
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

protoquest, да, вроде бы так, спасибо
Ответить с цитированием
  #6 (permalink)  
Старый 02.04.2016, 22:07
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

protoquest,
а возможно - без указания this.func[m] в функции? т.е. как-то так:
function showE(m){
    alert(this[m])
}

?
а в оптимале, чтобы была вообще одна функция, а в зависимости от места вызова применялся - нужный контекст
т.е. если вызвано из объекта obj.func то и контекст брался этого объекта

Последний раз редактировалось Cache, 02.04.2016 в 22:11. Причина: добавлено пояснение
Ответить с цитированием
  #7 (permalink)  
Старый 02.04.2016, 22:11
Аспирант
Посмотреть профиль Найти все сообщения от protoquest
 
Регистрация: 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.
Ответить с цитированием
  #8 (permalink)  
Старый 02.04.2016, 22:15
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

destus,
спасибо, не увидел ваш ответ сразу - то что нужно
Ответить с цитированием
  #9 (permalink)  
Старый 02.04.2016, 22:18
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

Сообщение от protoquest
У Вас на самом деле нет четкого понимания, чего Вы на самом деле хотите.
да, это действительно так, сейчас экспериментирую, пытаясь понять, как лучше сделать и как именно это можно использовать, потому что - данный способ - легко заменяется
showMsg(obj.func.msg3)
вот и пытаюсь понять плюсы и минусы метода, и его удобства
Ответить с цитированием
  #10 (permalink)  
Старый 02.04.2016, 22:22
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

Сообщение от protoquest
хотя, возможно, через жопу сделать, используя bind, но не нужно
а можно по конкретней, почему через "жопу"?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор массива объектов и работа с ними через localStorage pepel266 Общие вопросы Javascript 16 04.11.2015 18:30
Как удалить объекты select D_Sergeevich Элементы интерфейса 3 16.09.2014 21:13
Проблема! Добавление элементов с помощью append() и работа с ними Gurchava jQuery 3 14.04.2014 17:09
Постоянная работа / Front-end / Москва kooper Работа 4 29.09.2011 22:06
Подгрузка select и работа с ними после! BASSON_XVI jQuery 3 07.01.2011 11:28