Tengo una buena comprensión de Javascript, excepto que no puedo encontrar una buena manera de establecer la variable "this". Considerar:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
var old_fn = someObj.fn; //store old value
someObj.fn = myFunction; //bind to someObj so "this" keyword works
someObj.fn();
someObj.fn = old_fn; //restore old value
¿Hay alguna manera de hacer esto sin las últimas 4 líneas? Es bastante molesto ... He intentado vincular una función anónima, que pensé que era hermosa e inteligente, pero fue en vano:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
someObj.(function(){ fn(); })(); //fail.
Obviamente, pasar la variable a myFunction es una opción ... pero ese no es el punto de esta pregunta.
Gracias.
javascript
variables
scope
this
Erik Philips
fuente
fuente
$.proxy(function, element)
para que cada vez que se llame a esa función, esté en el contexto del elemento. api.jquery.com/jquery.proxy.bind()
Creo que estás buscando
call
:Esto llama
myFunction
conthis
set toobj
.También existe el método ligeramente diferente
apply
, que toma los parámetros de la función como una matriz:fuente
Si desea 'almacenar' el
this
valor en una función para poder llamarlo sin problemas más tarde (por ejemplo, cuando ya no tenga acceso a ese valor), puedebind
hacerlo (aunque no está disponible en todos los navegadores):fuente
bind
aparentemente está disponible en IE9 +, FF4 +, Safari 5.1.4+ y Chrome 7+ (fuente) . También puede llamar a bind directamente en una función anónima:var myFunction = function(){ /* this = something */ }.bind(something);
Mi búsqueda sobre cómo vincular
this
me trajo aquí, así que estoy publicando mis hallazgos: en 'ECMAScript 2015' también podemos configurar esto léxicamente usando las funciones de flecha para.Ver: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
En vez de:
Ahora podemos hacer:
fuente
Establecer la
this
palabra clave en javascript.Javascript tiene 3 métodos integrados para configurar la
this
palabra clave convenientemente. Todos están ubicados en elFunction.prototype
objeto para que cada función pueda usarlos (ya que cada función hereda de este prototipo a través de la herencia prototípica). Estas funciones son las siguientes:Function.prototype.call()
: Esta función toma el objeto que desea usar comothis
primer argumento. Entonces, el resto de los argumentos son los argumentos respectivos de la función que se llama.Function.prototype.apply()
: Esta función toma el objeto que desea usar comothis
primer argumento. Entonces, el segundo argumento es una matriz que contiene los valores de los argumentos de la función que se llama (el primer elemento de la matriz es el primer argumento de la función, el segundo argumento de la matriz es el segundo argumento de la función, etc.).Function.prototype.bind()
: Esta función devuelve una nueva función que tiene un valor diferente dethis
. Toma el objeto que desea establecer comothis
valor como primer argumento y luego devuelve un nuevo objeto de función.Diferencia entre llamar / aplicar y vincular:
call
yapply
son similares en el hecho de que llaman inmediatamente a la función (con un valor predefinido dethis
)bind
es diferentecall
yapply
en el hecho de que esta función devuelve una nueva función con un enlace diferente delthis
valor.Ejemplos:
fuente