tengo componentes de JavaScript, que ha siguiente arquitectura:Este puntero de función interna
var MyComponent = function(params)
{
setup(params);
this.doSomething()
{
// doing something
};
function setup(params)
{
// Setup
// Interaction logic
var _this = this; // "this" points to DOMWindow, not to created object
$(".some-element").click(function(){
_this.doSomething(); // it craches here, because of above
});
}
};
Cuando algo, siendo controlado por la lógica de interacción, ocurre, a veces tengo que remitir a los métodos de ejecución "públicas" de los componentes.
En esta situación, tengo un problema con "este" puntero.
Código de ejemplo demuestra que:
var Item = function()
{
this.say = function()
{
alert("hello");
};
this.sayInternal = function()
{
_sayInternal();
};
function _sayInternal()
{
this.say();
};
};
Para probarlo,
- crear un objeto:
var o = new Item();
- Esto funciona bien:
o.say(); // alerts "hello"
- Este accidentes:
o.sayInternal();
Me aparece un error:
TypeError: Result of expression 'this.say' [undefined] is not a function.
pienso, tal comportamiento tiene lugar, porque _sayInternal () la función es declarada (y no asignada al objeto, como "this.say = function()"). De esta forma, se comparte entre todos los objetos creados y actúa como una función estática en C++.
¿Es esto cierto?
Gracias! Gran explicación! – AntonAL