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.6 Identificador This

Otro concepto muy comúnmente mal entendido en JavaScript es el identificador this. Una vez más, hay un par de capítulos sobre él de esta serie, así que aquí vamos a introducir brevemente el concepto.

Aunque a menudo parece que this está relacionado con "patrones orientados a objetos", en JS este es un mecanismo diferente.

Si una función tiene una referencia this dentro de ella, esa referencia this normalmente apunta a un object. Pero el object al que apunta depende de cómo se llamó la función.

Es importante darse cuenta de que this no se refiere a la función en sí, y ése es el error más común.

He aquí una ilustración rápida:

function foo() {
    console.log( this.bar );
}

var bar = "global";

var obj1 = {
    bar: "obj1",
    foo: foo
};

var obj2 = {
    bar: "obj2"
};

// --------

foo();                // "global"
obj1.foo();            // "obj1"
foo.call( obj2 );        // "obj2"
new foo();            // undefined

Hay cuatro reglas para cómo se establece this, y se muestran en las cuatro últimas líneas de ese fragmento.

  1. foo() termina configurando this para el objeto global en modo no estricto - en modo estricto, esto sería undefined y obtendría un error en el acceso a la propiedad bar - por lo que "global" es el valor encontrado para este .bar.

  2. obj1.foo() establece this en el object obj1.

  3. foo.call(obj2) establece this en el objeto obj2.

  4. new foo() establece this en un nuevo objeto vacío.

En pocas palabras: para entender a qué se refiere this, hay que examinar cómo se llamó la función en cuestión. Será una de esas cuatro maneras que acabamos de mostrar, y eso responderá a lo que es this.

Nota: Para obtener más información al respecto, consulte los capítulos 1 y 2 del título This y Objetos Prototipos de esta serie.

Previous2.5 Funciones como ValoresNext2.7 Prototypes

Last updated 6 years ago

Was this helpful?