es una palabra reservada en javascript
hace referencia a un objeto, pero esta referencia puede variar implicitamente dependiendo si es un objeto global, un constructor o explicitamente dependiendo de los metodos bind, call, apply
contexto global
como un método dentro de un objeto
como constructor en una función o clase
como un manejador de eventos DOM
- en browser hace referencia al objeto global window
- en nodejs hace referencia al objeto global
en una funcion de nivel superior this seguira haciendo referencia a window aun cuando las funciones ofrecen un contexto para sus variables
usando el modo stricto 'use strict' this dentro de una funcion hara referencia a undefined
un metodo es una funcion en un objeto o una accion que un objeto puede realizar un metodo usa this para referirse a las propiedades del objeto
en un objeto anidado this hace referencia al objeto en el actual contexto de donde es llamado, otra forma de pensarlo es que this hace referencia al objeto del lado izquierdo del punto del metodo llamado
al utilizar la palabra reservada new se esta creando una instancia de una funcion constructora, en este contexto this hace referencia (o esta unido) a la instancia, que muy posiblemente sera una variable
this en el constructor de una clase se comporta igual que al constructor de una funcion
this hace referencia al elemento targeted
CALL Y APPLY
bind puede ser util para acceder a eventos de una clase dentro de otra clase
call y apply son muy similares ya que invocan una funcion con un contexto definido para this y argumentos opcionales
la unica diferencia es que call requiere los parametros uno por uno y apply los recibe en un array
al usar call o apply, this se convierte en el objeto pasado como argumento
en las funciones call y apply puedes pasar argumentos adicionales como parametros
en call cada valor adicional que pasemos sera enviado como argumento
longerSummary.call(book, 'dystopian', 1932)
en apply es necesario enviarlos como array
longerSummary.apply(book, ['dystopian', 1932])
se recomienda utilizar apply
call y apply son metodos de uso unico, si llama la funcion con el contexto this lo tendra pero la funcion permanecera sin cambios
bind a diferencia conserva el contexto de this en la funcion
estas funciones no enlazan su propio contexto por lo cual lo buscan en un nivel superior
es util para entender el codigo en momento de análisis