объекты и работа с ними
просьба сильно не пинать, а объяснить и/или дать ссылку на хороших мануал, только пытаюсь разобраться с ООП
есть объект имеющий древовидную структуру: 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) - вообще не получилось, видимо, как-то не правильно создаю указатель |
как изменить имя - вроде бы разобрался (в принципе-то, банально), но получилось только вне объекта:
obj.showF=obj.func.showF; а хотелось бы - изнутри, но конструкция вида: obj.showF: obj.func.showF возвращает ошибку |
Цитата:
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'); |
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") так штоле? |
protoquest, да, вроде бы так, спасибо
|
protoquest,
а возможно - без указания this.func[m] в функции? т.е. как-то так: function showE(m){ alert(this[m]) } ? а в оптимале, чтобы была вообще одна функция, а в зависимости от места вызова применялся - нужный контекст т.е. если вызвано из объекта obj.func то и контекст брался этого объекта |
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") |
destus,
спасибо, не увидел ваш ответ сразу - то что нужно |
Цитата:
showMsg(obj.func.msg3)вот и пытаюсь понять плюсы и минусы метода, и его удобства |
Цитата:
|
Часовой пояс GMT +3, время: 12:06. |