De los new documentos de MDN dice:
La nueva palabra clave hace lo siguiente:
- Crea un objeto JavaScript simple y en blanco.
- Agrega una propiedad al nuevo objeto (
__proto__) que se vincula con el objeto prototipo de la función constructora
Entonces, ¿cómo se define exactamente el prototipo? Mi pensamiento fue que sería:
class ), buscaría si hay un [Constructor].prototype declarado en algún lugar y lo usaría, y si no, recurriría a... (¿no está seguro?). Como ejemplo, si el constructor se llama Range , buscaría si Range.prototype está definido y lo usaría como prototipo.class , usaría todos los métodos o propiedades para construir el prototipo.¿Es más o menos una comprensión correcta, o qué me podría estar perdiendo?
No importa si el constructor se declara con sintaxis de clase o como una function , el objeto <constructor.prototype> siempre existirá, incluso si nunca se lo menciona explícitamente. Ejemplo:
function FooFn() {} class FooClass{} console.log(FooFn.prototype); console.log(FooClass.prototype); Estos objetos .prototype son objetos simples que se convierten en el prototipo interno de las instancias creadas con el new . También tienen una propiedad .constructor que apunta al constructor (la función/clase utilizada para crear una instancia).
Entonces no es exactamente eso
buscaría para encontrar si hay un [Constructor].prototype declarado en algún lugar y lo usaría
sino que dicha propiedad siempre existe en funciones y clases, y cuando se crea una instancia con new , el objeto dentro de la propiedad .prototype se convierte en el prototipo interno de la instancia.
Si está en una clase, usaría todos los métodos o propiedades para construir el prototipo.
No exactamente: una clase es principalmente azúcar sintáctica para una función. Qué hace esto:
class Foo { method() { console.log(); } }es casi exactamente (pero no del todo) lo mismo que
function Foo() {} Foo.prototype = function method() { console.log(); } Los métodos se asignan al objeto .prototype de la clase cuando ocurre la declaración de la clase, no cuando se crea una instancia.
class X { xMethod() { } } console.log(X.prototype); console.log(X.prototype.hasOwnProperty('xMethod')); console.log(X.prototype === (new X).__proto__);