Viniendo de un fondo de Python, he leído esto, aprendiendo Javascript :
Las clases son, de hecho, "funciones especiales" , y así como puede definir expresiones de función y declaraciones de función, la sintaxis de clase tiene dos componentes: expresiones de clase y declaraciones de clase.
en el sitio web dev.mozilla ..
Lo que entiendo es que:
Las funciones son objetos en POO
Y no las clases son funciones.
Y tal vez las clases mismas sean objetos. No estoy seguro.
¿Me equivoco?
De hecho, las clases son funciones, y las funciones también son objetos: puede colocar pares clave-valor arbitrarios en funciones, al igual que en objetos.
class X{} console.log(typeof X); console.log(X instanceof Object);Esa es una declaración de clase. Una expresión de clase es como:
const TheX = class X{} console.log(typeof TheX); console.log(TheX instanceof Object);Cuando una clase tiene pares clave-valor directamente sobre ella (como un objeto), las propiedades generalmente se denominan "estáticas":
class X{ static prop = 'foo'; } console.log(X.hasOwnProperty('prop')); Las clases creadas con class no se pueden invocar sin new , pero las clases creadas con function sí (en cuyo caso es equivalente a una función estándar).
function X() { } // As a class: const x = new X(); // As an ordinary function: const somethingElse = X(); Con la sintaxis de function , si la función se comporta como una clase o como una función simple lo determina la persona que llama, ya sea que se use new o no. Si se usa new , this dentro de la función se configura para que sea un objeto heredado de X.prototype , que se devuelve automáticamente al final. Si no se usa new , this dentro de la función se establece en el contexto de llamada si hay uno (por ejemplo someObj.X() tendrá que this sea someObj ).