2011-08-02 14 views
19

Para mí, las clases son bastante similares a los módulos NodeJS (CommonJS). Puede tener muchos de ellos, pueden reutilizarse, pueden usar el uno al otro y generalmente son uno por archivo.Módulos NodeJS vs clases

¿Qué hace que los módulos sean tan diferentes de las clases? La forma en que los usa difiere, y la diferencia en el espacio de nombres es obvia. Además de eso, me parecen lo mismo o quizás no estoy viendo el beneficio obvio aquí.

+0

lo que me intriga es un servidor de puntos de referencia sobre Node.js - CommonJS módulos vs ECMAScript 6 clases –

Respuesta

21

Los módulos se parecen más a los paquetes (para usar el término Java) que a las clases. No crea una instancia de un módulo; solo hay una copia de esto. Es una herramienta para organizar la funcionalidad relacionada, pero normalmente no encapsula los datos de una instancia particular de un objeto.

Probablemente el análogo más cercano a una clase (dejando de lado las bibliotecas que realmente construyen herencia basada en clases en JavaScript) es solo una función de constructor. Por supuesto, puede poner tales funciones dentro de un módulo.

function Car() { 
    this.colour = 'red'; 
} 
Car.prototype.getColour = function() { return this.colour; }; 

var myCar = new Car(); 
myCar.getColour(); // returns 'red' 

Utiliza módulos y clases para el encapsulado, pero la naturaleza de esa encapsulación es diferente.

0

Una cosa fundamental; esa cosa de "generalmente uno por archivo" no es verdad; los módulos son absolutamente uno por archivo. Un require() que lleva el exports del módulo al espacio de nombres no tiene forma de distinguir entre los contenidos exportados de ese módulo; todo lo que exporta el módulo (archivo) se importa con una declaración require(). Intentar poner más de un módulo en un archivo solo significa que obtendrá todo en ese archivo cuando intente cargar el módulo "cualquiera".

1

JS fue inicialmente un sistema de herencia prototípico. Fue super simple como el resto del lenguaje. Pero luego Netscape decidió hacer que se asemejara más a Java y agregó la idea de constructores al lenguaje. Por lo tanto, nacieron las pseudo clases. Puede comprobar este enlace para saber cómo POO prototipos se utiliza en JS: http://howtonode.org/prototypical-inheritance

Cuestiones relacionadas