Pensé que esto sería algo que podría fácilmente googlear, pero tal vez no estoy haciendo la pregunta correcta ...
¿Cómo configuro todo lo que se refiere a "esto" en una determinada función de JavaScript?
por ejemplo, como con la mayoría de las funciones de jQuery como:
$(selector).each(function() {
//$(this) gives me access to whatever selector we're on
});
¿Cómo escribo / llamo a mis propias funciones independientes que tienen una referencia apropiada "this" cuando se llama? Yo uso jQuery, así que si hay una forma específica de jQuery de hacerlo, sería ideal.
javascript
jquery
scope
this
usuario126715
fuente
fuente
$.proxy
Respuestas:
Los javascripts
.call()
y los.apply()
métodos le permiten establecer el contexto para una función.Ahora puedes llamar:
Lo cual alertaría
FOO
. Al revés, pasarobj_b
alertaríaBAR!!
. La diferencia entre.call()
y.apply()
es que.call()
toma una lista separada por comas si está pasando argumentos a su función y.apply()
necesita una matriz.Por lo tanto, puede escribir fácilmente una función
hook
utilizando elapply()
método Por ejemplo, queremos agregar una función al.css()
método jQuerys . Podemos almacenar la referencia de función original, sobrescribir la función con código personalizado y llamar a la función almacenada.Dado que el
arguments
objeto mágico es una matriz como objeto, simplemente podemos pasarloapply()
. De esa forma, garantizamos que todos los parámetros pasan a la función original.fuente
obj_a
, por ejemplo, puede crear una copiavar boud_myfunc = myfunc.bind(obj_a)
y simplemente llamarbound_myfunc()
según sea necesario.Uso
function.call
:¿Dónde
that
está el objeto que deseathis
en la función?fuente
function
es una palabra clave reservada; considere actualizar su respuesta para incluir una función con nombre yafunction.call(...)
que no es JavaScript válido.jQuery utiliza un
.call(...)
método para asignar el nodo actual althis
interior de la función que pasa como parámetro.EDITAR:
No tenga miedo de mirar dentro del código de jQuery cuando tenga dudas, todo está en JavaScript claro y bien documentado.
es decir: la respuesta a esta pregunta está alrededor de la línea 574,
callback.call( object[ name ], name, object[ name ] ) === false
fuente
Puede usar la función de vinculación para establecer el contexto
this
dentro de una función.fuente
Otro ejemplo básico:
No funciona:
Trabajando:
Básicamente: simplemente agregue .bind (this) a su función
fuente