Pregunto esto desde el punto de vista del diseño del lenguaje. Así que estoy tratando de averiguar¿Cuál es el fundamento del comportamiento de la palabra clave "this" en JavaScript?
- ¿Cuál es la razón fundamental para el comportamiento de
this
? - ¿En qué medida el comportamiento de
this
fue un error o podría mejorarse?
Para aclarar por qué estoy inquieto por this
, considere este ejemplo:
var a = {};
a.f = function(){ return this; }
var f = a.f;
// f() != a.f()
Nota cuán fácilmente el objeto al que pertenecen f()
se pierde: separado de a
, this
se convierte en el mundial objeto (window
para navegadores).
Consideremos ahora:
var newA = function(){
var self = {};
self.f = function(){ return self; }
return self;
}
var a = newA();
var f = a.f;
// f() == a.f() !
Sin utilizar this
en absoluto, estamos en condiciones de establecer y mantener el contexto del objeto, independientemente de dónde o cómo se utiliza el método. No puedo evitar pensar que, con el poder que proporcionan cierres, this
se vuelve superflua, y tal vez incluso un poco peligroso ...
no estoy en alguna venganza contra this
, o en busca de iniciar una discusión; Simplemente estoy tratando de entenderlo mejor. Aprecio que 'esto' puede ser útil, pero reconozco que it can be confusing también ... Ciertamente confunde a los principiantes, y tal vez a los expertos también en casos suficientemente oscuros.
Y, sin embargo, sigue siendo una parte muy utilizada y aparentemente respetada del lenguaje, en un momento en que otros aspectos centrales del lenguaje parecen un juego justo para rechazar (es decir, Crockford y with
o new
). ¿Qué me estoy perdiendo entonces, eso hace que this
sea indispensable?
¿Qué le da la impresión de que "esto" es un error? –
@Gamecat: nunca has intentado diseñar un lenguaje similar al de JavaScript, ¿o sí? – artificialidiot
Sigo pensando que esto es discutidor. El lenguaje implica un problema, cf "Qué sorprendente es 'esto' (si es sorprendente)" – annakata