Búsqueda de sitios web

javascript - ¿Hay alguna ventaja en usar Clases con funciones estáticas frente a Módulos?


Me gustaría recibir algún consejo. Estoy usando TypeScript para crear cuadros de diálogo. Una vez creados, se encargan de sí mismos ya que tienen sus propios botones de envío y realizan sus propias verificaciones.

¿Hay alguna ventaja o desventaja en cualquiera de las siguientes dos formas de codificación? Hasta ahora, lo único que puedo ver es que el enfoque de módulos con exportación me permite ocultar una función y hacerla privada si no la exporto. Cuando uso static y trato de usar el modificador private, aparece un ícono de candado junto a él en IntelliSense, pero aún así me permite usarlo.

module Dialog {
    export class Modal {
        static createAccessModal(link: Link) {
            createModal(link);
        }
        static createAdminModal(link: Link) {
            link.Modal.MaxHeight = 600;
            link.Modal.Width = false;
            createModal(link);
        }
        static private createModal(link: Link) {

            ...
        }
    }
}

o haciendo:

module Dialog {
    export module Modal {
        export function createAccessModal(link: Link) {
            createModal(link);
        }
        export function createAdminModal(link: Link) {
            link.Modal.MaxHeight = 600;
            link.Modal.Width = false;
            createModal(link);
        }
        function createModal(link: Link) {

            ...
        }
    }
}

Respuesta #1

El enfoque por módulos es preferido para lo que estás tratando de lograr.

Si usas la forma de clase, estás efectivamente definiendo una función constructora aunque nunca crearás instancias de objetos, y agregando miembros directamente en la función constructora que no pueden ser verdaderamente privados (como observaste).

Usando el enfoque de módulos, simplemente estás construyendo un objeto, y los miembros que no exportas se contienen dentro del cierre que configura el objeto, dándote verdadera privacidad sobre ellos.

Una buena manera de ver los efectos de ambos es pegar tu código de cada uno en http://www.typescriptlang.org/Playground/ y analizar el código generado.