Tengo entendido que casi todo en JS es un objeto y que los constructores son una forma de crear un nuevo objeto. Sé que los tipos de datos como Array, Function y Objects tienen que usar la nueva palabra clave, lo que los convierte en objetos y en el backend funciona como new Array() , new Function() o new Object() Corríjame si soy equivocado. Aquí es donde las cosas se volvieron confusas para mí. Asigné x a una matriz [1, 2, 3, 4] . Cuando inspeccioné x, mostró que el [[prototype]] es un Array y el constructor es el objeto Array() . Al final, mostró el prototipo del objeto Array() que es Object y el constructor para que Object sea Object() . Entendí todo hasta que Object.constructor y el resultado fue Function() . ¿No debería ser Object() , en lugar de Function() ? Si el constructor de un objeto es new Object() , ¿por qué me dice que Function es el constructor? De esa manera, si creo un nuevo objeto, se instanciará así: let x = new Function() , ¿sí? Ese no fue el único. Todos los tipos de datos primitivos y de referencia dieron el mismo resultado. Aquí está el código. Estaba tan feliz cuando pensé que había captado este conocimiento y luego, de alguna manera, lo rompí. Hmmm, muy parecido a la codificación... jajaja. Gracias de antemano por explicar.
let x = [1, 2, 3, 4]; undefined x; (4) [1, 2, 3, 4] 0: 1 1: 2 2: 3 3: 4 length: 4 **[[Prototype]]: Array(0)** at: ƒ at() concat: ƒ concat() **constructor: ƒ Array()** copyWithin: ƒ copyWithin() entries: ƒ entries() every: ƒ every() ...Many other Array methods... **[[Prototype]]: Object** **constructor: ƒ Object()** hasOwnProperty: ƒ hasOwnProperty() isPrototypeOf: ƒ isPrototypeOf() propertyIsEnumerable: ƒ propertyIsEnumerable() toLocaleString: ƒ toLocaleString() toString: ƒ toString() valueOf: ƒ valueOf() __defineGetter__: ƒ __defineGetter__() __defineSetter__: ƒ __defineSetter__() __lookupGetter__: ƒ __lookupGetter__() __lookupSetter__: ƒ __lookupSetter__() __proto__: (...) get __proto__: ƒ __proto__() set __proto__: ƒ __proto__() **Array.constructor;** *ƒ Function() { [native code] }* **Object.constructor;** *ƒ Function() { [native code] }* **Function.constructor;** *ƒ Function() { [native code] }* **String.constructor;** *ƒ Function() { [native code] }* **Boolean.constructor;** *ƒ Function() { [native code] }* **Number.constructor;** *ƒ Function() { [native code] }*Object es una función utilizada para construir objetos. Como es una función, su propio constructor es Function .
Creo que podría pensar de esta manera, el constructor es una función que devuelve una instancia de objeto.
Ahora, la razón por la que agrega new es que crea una nueva instancia del objeto.
Ahora la clase y la función en js son casi las mismas.
Mira el ejemplo a continuación
class test { constructor(name){ this.name = name; } getName(){ return this.name; } } console.log(new test("hej").getName()) function test(name){ this.name = name; } test.prototype.getName =function(){ return this.name; } console.log(new test("hej").getName())