¿Qué significa que Javascript está basado en prototipos?

Cuando empecé a estudiar Javascript y POO escuché muchas veces que a pesar de que Javascript es un lenguaje orientado a objetos no está basado en clases sino en prototipos.
En este artículo intentaremos entender qué significa exactamente esto y por qué es importante saber qué hace un prototipo.

En otros lenguajes orientados a objetos cuando declaramos una clase estamos creando un nuevo tipo de dato compuesto, es decir, un tipo de dato formado por tipos primitivos. Pero esto no es lo que ocurre en Javascript, a pesar de que desde ES2015 usemos la palabra reservada class. Los prototipos son instancias de objetos. Mientras que las clases son modelos, los objetos heredan directamente de otros objetos por defector en JS.

Entonces, primero que nada tenemos que entender qué es la cadena de prototipos.

La cadena de prototipos es una estructura en forma de árbol que conecta funcionalidades entre objetos y en cuya raíz se encuentra Object.prototype. Object.prototype은 toString( ), hasOwnProperty( ) 또는 keys( )와 같은 객체에 대한 일련의 방법을 증명합니다.

Prácticamente todos los objetos en Javascript son instancias de Object si seguimos la cadena de prototipos. 당신은 아마 당신이 sabes, casi todo es un objeto en Javascript. Incluso algunos tipos de datos primitivos (string, number y boolean específicamente) pueden ser objetos por fracciones muy pequeñas de tiempo. Entonces, los arrays son objetos, las funciones son objetos y, por supuesto, los objetos son objetos.

La cadena prototipal nos permite crear instancias de arrays, por ejemplo, que tengan acceso a todos los métodos definidos en Array.prototype como map, forEach, filter y un gran etc. Pero también obtenemos acceso a todos los métodos disponibles en Object.prototype.

Pero, ¿cómo ocurre esto?
Pues resulta que todos los objetos en Javascript tienen una propiedad oculta llamada __proto__ que guarda una referenceencia al objeto prototype del constructor. Siguiendo con el ejemplo de los arrays, un array tiene acceso a todos los métodos en Object.prototype porque cada array individual es una instancia del objeto Array, y el objeto Array es una instancia del objeto Object. 계속해서 Object.prototype의 프로토타입을 llegamos로 가져오려면 null이 있어야 합니다.



De esta manera, cuando intentamos ejecutar un método en un objeto, Javascript primero buscará en las propiedades del objeto en cuestión. Si no encuentra una propiedad con ese nombre buscará en su propiedad __proto__, que guarda una referencencia al objeto prototype de su constructor. Si no la encuentra ahí buscará en la propiedad __proto__ del objeto 생성자. Esto continuará hasta que encuentre esa propiedad o método, o no la encuentre y lance un TypeError.

Por si acaso, ya que estamos usando los arrays como ejemplo, cabe recordar que los arrays son azúcar sintáctico en Javascript. Son objetos con un comportamiento especial, pero bajo la alfombra son algo así:



{
    ‘0’: value,
    ‘1’: value,
    ‘2’: value
}



Lo que esto significa es que, por ejemplo, cada vez que declaramos un array estamos creando una instancia del objeto Array que viene con el lenguaje. Si lo miramos en consola veremos que la propiedad __proto__ está vinculada al objeto 어레이:



__proto__는 Object.prototype을 참조할 수 있는 __proto__에 대해 __proto__에 대해 자세히 설명합니다.



Entonces, ¿hay alguna forma de crear un objeto sin prototipo en Javascript?
Pues si, la hay. Resulta que una de las formas que tenemos de crear objetos es con Object.create( ), a la cual podemos pasarle como argumento el objeto que queremos que sea el prototipo del nuevo objeto que queremos crear. Si le pasamos null estaremos creando un objeto que sea solo eso, una 해시 테이블:



const objetoSinPrototipo = Object.create(null);

좋은 웹페이지 즐겨찾기