Estoy intentando aprender a programar Javascript orientado a objetos, y pese a entender qué es OO, me está costando el tema de los privates, públicos y demás (si alguien conoce una web que sea buena explicándolo lo agradecería, hasta ahora sólo he encontrado jeroglíficos ¬¬)
Problema:
Quiero una clase para controlar los layers de una página; a la izquierda opciones y a la derecha contenido. Al clickear una opción se hace un fadeOut en un layer de la derecha y, al acabar, un fadeIn al que se ha pulsado.
Además, a la opción pulsada le agrego un CSS para indicar que es la activa.
(Advierto de que seguramente es una chapuza...
![borracho](http://static.forosdelweb.com/fdwtheme/images/smilies/borracho.png)
Código:
Código:
Los problemas los tengo en la llamada a funciones desde los callbacks de fadeIn y fadeOut. Creo que tiene algo que ver con los Scopes (áreas de trabajo de las variables, ¿verdad?), y con la forma de declarar variables públicas y privadas. Pero todo esto ahora mismo me es muy confuso porque está muy raramente explicado por ahí fuera.function faqControl ($firstSelector, $firstLayer) { // METHODS this.switchOption = function ($newSelector, $newLayer) { if(this.switchAdmitted()) { this.changeLayer($newLayer); this.unselectSelector(); this.$currentSelector = $newSelector; this.selectSelector(); } }; // Este metodo solo es para asegurarme de que mostramos una capa a la vez. this.switchAdmitted = function () { if(this.state != 'ready') return false; else return true; } this.unselectSelector = function () { this.$currentSelector.removeClass('selected'); }; this.selectSelector = function () { this.$currentSelector.addClass('selected'); }; this.changeLayer = function ($newLayer,callback) { this.state = 'changing'; this.$currentLayer.fadeOut('slow', function () { $newLayer.fadeIn('slow', function () { this.state='ready'; }); }); this.$currentLayer = $newLayer; }; this.showLayer = function () { this.$currentLayer.fadeIn('fast'); }; //Constructor. Given objects will be the first elements shown. this.$currentSelector = $firstSelector; this.$currentLayer = $firstLayer; this.state = 'ready'; this.selectSelector(); this.showLayer(); }
Gracias por todas las colaboraciones de antemano ;D