2011-07-06 10 views
8

Como en este ejemplo:Como hacer un super en función javascript

var teste = {name:'marcos'}; 
$(teste).each(function(){ 

    var name = this.name; // i don't want to do that. 

    // i want to have access to 'this' inside this function (sayName) 
    var sayName = function(){ 
     alert(name); // there is something like "super" in java? or similar way to do? 
    } 
    sayName(); 

}); 

¿Cómo puedo hacer eso?

Respuesta

0

vi un montón de ejemplos en Internet (jQuery basan -incluyendo) usando la siguiente:

var that = this; 
var sayName = function() { 
    alert(that.name); 
} 
+0

-1: Este es el Código original de OP. Él está pidiendo una alternativa a esto. –

+0

Esto es injusto e incorrecto. Preguntó: "Quiero tener acceso a 'esto' dentro de esta función" –

+0

Y en la línea de arriba, él demuestra su solución y escribe "no quiero hacer eso" –

-1

Aquí es otra forma:

var teste = {name:'marcos'}; 
$(teste).each(function(){ 

var that = this; 

var sayName = function(){ 
    alert(that.name); 
} 
sayName(); 

}); 

Esa es su súper :-) En serio , no hay un "super" porque no es una extensión.

+0

-1: este es el código original de OP. Él está pidiendo una alternativa a esto. –

2

this nunca está implícito en JavaScript (como lo es en Java). Esto significa que si no invoca una función como método en un objeto, this no se vinculará a algo razonable (estará vinculado al objeto window en el navegador). Si usted quiere tener un this dentro de la función, esa función debe utilizarse como un método, es decir:

var teste = {name:'marcos'}; 
$(teste).each(function(){ 

    this.sayName = function(){ 
     alert(this.name); 
    } 
    this.sayName(); 

}); 

Entonces sayName es un método y se invoca en this

+0

puedes eliminar 'var name = ...' y reemplazar 'alert (name)' con 'alert (this.name)', creo que esta fue tu intención original. Además, agrega el objeto 'sayName' al' test' y el próximo 'each' contará' sayName' también, lo cual no es bueno. –

+0

@Victor: No, no puedes. –

+0

@Tomalak Geret'kal Pruébalo, funciona. 'this' inside function al llamar a' this.sayName() 'es lo mismo que otside, es decir, el objeto' teste'. –

Cuestiones relacionadas