Javascript Avanzado en Español
  • Introducción
  • I- Up & Going
    • 0- Prefacio
    • 1- En la programación
      • 1.1 Código
      • 1.2 Inténtalo tú mismo
      • 1.3 Operadores
      • 1.4 Valores y Tipos
      • 1.5 Comentarios del Código
      • 1.6 Variables
      • 1.7 Bloques
      • 1.8 Condicionales
      • 1.9 Bucles
      • 1.10 Funciones
      • 1.11 Scope (Ámbito)
      • 1.12 Práctica
      • 1.13 - Revisión
    • 2- En Javascript
      • 2.1 Valores y Tipos
      • 2.2 Variables
      • 2.3 Condicionales
      • 2.4 Modo estricto
      • 2.5 Funciones como Valores
      • 2.6 Identificador This
      • 2.7 Prototypes
      • 2.8 Lo Viejo y Lo Nuevo
      • 2.9 Non-JavaScript
      • 2.10 Revisión
    • 3- En YDKJS
      • 3.1 Scope & Closures
      • 3.2 This & Object Prototypes
      • 3.3 Tipos & Gramática
      • 3.4 Async & Performance
      • 3.5 ES6 & Más allá
      • 3.6 Revisión
  • II- Scope & Closures
    • 0- Prefacio
    • 1- ¿Qué es el Scope?
      • 1.1 Teoría del Compilador
      • 1.2 Entendiendo el Scope
      • 1.3 Scopes Anidados
      • 1.4 Errores
      • 1.5 Revisión
    • 2- Lexical Scope
      • 2.1 Tiempo de Lex
      • 2.2 Trucos léxicos
      • 2.3 Revisión
    • 3- Function vs. Block Scope
      • 3.1 Ámbito de las funciones
      • 3.2 Ocultación en el ámbito común
      • 3.3 Funciones como ámbitos
      • 3.4 Bloques como ámbitos
      • 3.5 Revisión (TL; DR)
    • 4- Hoisting
      • 4.1 ¿El Huevo o la Gallina?
      • 4.2 El compilador pega de nuevo
      • 4.3 Funciones Primero
      • 4.4 Revisión
    • 5- Scope Closure
      • 5.1 Ilustración
      • 5.2 Nitty Gritty
      • 5.3 Ahora puedo ver
      • 5.4 Loops + Closure
      • 5.5 Módulos
      • 5.6 Revisión
    • 6- Scope Dinámico
    • 7- Ámbito de bloque de Polyfilling
      • 7.1 Traceur
      • 7.2 Bloques implícitos vs. explícitos
      • 7.3 Rendimiento
    • 8- Lexical-this
  • III- this & Object Prototypes
    • 0- Prefacio
    • 1- this o That?
      • 1.1 ¿Porque this?
      • 1.2 Confusiones
      • 1.3 ¿Que es this?
      • 1.4 Revisión
    • 2- this, todo tiene sentido ahora!
      • 2.1 Sitio de llamada
      • 2.2 Nada más que reglas
      • 2.3 Todo en orden
Powered by GitBook
On this page

Was this helpful?

  1. I- Up & Going
  2. 2- En Javascript

2.7 Prototypes

Previous2.6 Identificador ThisNext2.8 Lo Viejo y Lo Nuevo

Last updated 6 years ago

Was this helpful?

El mecanismo prototype en JavaScript es bastante complicado. Sólo le echaremos un vistazo aquí. Usted querrá pasar un montón de tiempo revisando los capítulos 4-6 del título de this y los objetos prototipos de esta serie para todos los detalles.

Cuando hace referencia a una propiedad en un objeto, si esa propiedad no existe, JavaScript utilizará automáticamente la referencia de prototipo interno de ese objeto para buscar otro objeto en el que buscar la propiedad. Se podría pensar en esto casi como un fallback si la propiedad está desaparecida.

El vínculo de referencia del prototipo interno de un objeto a su fallback ocurre en el momento en que se crea el objeto. La forma más sencilla de ilustrarlo es con una utilidad incorporada llamada Object.create(..).

Considere:

var foo = {
    a: 42
};

// crear `bar` y vincularlo a` foo`
var bar = Object.create( foo );

bar.b = "hello world";

bar.b;        // "hello world"
bar.a;        // 42 <-- delegado a `foo`

Puede ayudar a visualizar los objetos foo y bar y su relación:

La propiedad a no existe en realidad en el objeto bar, sino porque bar está vinculada al prototipo de foo, JavaScript automáticamente vuelve a buscar en el objeto foo, donde se encuentra.

Este vínculo puede parecer una característica extraña del lenguaje. La forma más común de usar esta característica -y yo diría, abusada- es tratar de emular/falsificar un mecanismo de "clase" con "herencia".

Pero una forma más natural de aplicar prototipos es un patrón llamado "delegación de comportamiento", en el que intencionalmente diseña sus objetos vinculados para poder delegar de uno a otro las partes del comportamiento necesario.

Nota: Para obtener más información sobre los prototipos y la delegación de comportamiento, consulte los capítulos 4-6 del título This y Objetos Prototipos de esta serie.