Exportaciones por defecto vs. nombradas
Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy — lección 10 de 56.
En los módulos de JavaScript, tienes dos formas principales de exportar tu código: exportaciones con nombre (named exports) y exportaciones por defecto (default exports).
Las Exportaciones Nombradas te permiten exportar múltiples valores desde un módulo:
// math.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}Al importar exportaciones con nombre, debes usar exactamente los mismos nombres dentro de llaves:
// app.js
import { add, subtract } from './math.js';
console.log(add(5, 3)); // 8
console.log(subtract(10, 4)); // 6Si necesitas renombrar una importación con nombre, utiliza la palabra clave as para crear un alias:
// app.js
import { add as sum, subtract as minus } from './math.js';
console.log(sum(5, 3)); // 8
console.log(minus(10, 4)); // 6Default Exports (Exportaciones por defecto) te permiten exportar un único valor principal de un módulo:
// user.js
const user = {
name: 'John',
age: 30
};
export default user;Al importar una exportación por defecto, puedes usar cualquier nombre que desees sin llaves:
// app.js
import person from './user.js';
console.log(person.name); // 'John'¿Cuándo usar cuál? Usa named exports cuando un módulo proporciona múltiples utilidades relacionadas (por ejemplo, una colección de funciones auxiliares). Usa una default export cuando un módulo tiene un propósito principal o un valor principal (por ejemplo, una clase, un componente o un objeto de configuración).
Puedes combinar ambos tipos de exportaciones en un solo módulo:
// vehicle.js
export const wheels = 4;
export const doors = 4;
const car = {
brand: 'Toyota',
model: 'Corolla'
};
export default car;E impórtalos juntos:
// app.js
import myCar, { wheels, doors } from './vehicle.js';
console.log(myCar.brand); // 'Toyota'
console.log(wheels); // 4Desafío
FácilTienes dos archivos. Tu tarea es configurar las exportaciones en calculator.js y las importaciones en main.js.
- En
calculator.js: Exportacalculatecomo default ysquarecomo named - En
main.js: Importa ambas funciones correctamente
Las pruebas verificarán:
- Que se use la exportación por defecto (default export) para
calculate - Que se use la exportación nombrada (named export) para
square - Que ambas importaciones funcionen correctamente
Hoja de referencia
Exportaciones Nombradas — exporta e importa múltiples valores por su nombre exacto:
// math.js
export function add(a, b) { return a + b; }
export function subtract(a, b) { return a - b; }
// app.js
import { add, subtract } from './math.js';
import { add as sum } from './math.js'; // alias con "as"Exportaciones por Defecto — exporta un valor principal; impórtalo con cualquier nombre, sin llaves:
// user.js
export default { name: 'John', age: 30 };
// app.js
import person from './user.js';Combinando Ambos — la importación por defecto va primero, las importaciones nombradas van entre llaves:
// vehicle.js
export const wheels = 4;
export default { brand: 'Toyota', model: 'Corolla' };
// app.js
import myCar, { wheels } from './vehicle.js';Cuándo usar cada uno: usa exportaciones nombradas para múltiples utilidades relacionadas; usa una exportación por defecto para el valor principal único de un módulo (clase, componente, configuración).
Pruébalo tú mismo
// TODO: Importa ambas funciones aquí desde calculator.js
// Prueba
console.log(calculate(10, 5, '+')); // Debería mostrar 15
console.log(square(4)); // Debería mostrar 16Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Objetos y la palabra clave this
Repaso rápido: ObjetosAgregar métodos a los objetosEntendiendo la palabra clave thisFunciones constructorasLa palabra clave newDesafío de repaso7Herencia y la palabra clave extends
HerenciaLa relación "es-un"La palabra clave extendsEl método super()Heredar propiedades y métodosDesafío de repaso13Composición vs. Herencia
La relación "tiene-un" vs. "es-un"Los límites de la herencia profundaConstrucción de objetos2Organización del código
¿Qué son los módulos?Exportar con exportImportar con importExportaciones por defecto vs. nombradas5Encapsulamiento y Acceso
EncapsulamientoCampos de clase públicos y privadosMétodos privadosDesafío de repaso8Organización del código OOP
Organizar clases en módulos11Proyecto: Un renderizador de figuras
Configuración: Clase Figura y exportaciónHerencia de la clase Círculo14Sistema de Gestión de Biblioteca
Diseño de la BibliotecaClase Libro con Composición9Métodos y propiedades estáticos
Nivel de clase vs. Nivel de instanciaPropiedades estáticasMétodos de utilidad estáticosDesafío de repaso