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, но не нужно
|
а можно по конкретней, почему через "жопу"?
|
|
|
|