2011-07-06 9 views
8

jak w poniższym przykładzie:Jak zrobić Super o funkcji 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(); 

}); 

W jaki sposób można to zrobić?

Odpowiedz

0

Widziałem wiele przykładów w internecie (jQuery oparte na tym), używając to:

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

-1: To Oryginalny kod OP. On prosi o alternatywę do tego. –

+0

To jest niesprawiedliwe i złe. Zapytał: "chcę mieć dostęp do" tego "wewnątrz tej funkcji" –

+0

W powyższym wierszu demonstruje twoje rozwiązanie i pisze: "Nie chcę tego robić". –

-1

Oto jeszcze jeden sposób:

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

var that = this; 

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

}); 

To jest Twój Super :-) Poważnie , nie ma "super", ponieważ nie jest to rozszerzenie.

+0

-1: To jest oryginalny kod OP. On prosi o alternatywę do tego. –

2

this nigdy nie jest niejawna w JavaScript (tak jak jest w Javie). Oznacza to, że jeśli nie wywołasz funkcji jako metody na obiekcie, this nie będzie wiązało się z czymś sensownym (będzie związane z obiektem window w przeglądarce). Jeśli chcesz mieć this wewnątrz funkcji, funkcja ta powinna być stosowana jako metoda, czyli:

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

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

}); 

Następnie sayName to metoda jest wywoływana w this

+0

możesz bezpiecznie usunąć 'var name = ...' i zastąpić 'alert (name)' z 'alert (this.name)', uważam, że było to pierwotną intencją. Poza tym dodaje 'sayName' do obiektu' test', a następnie 'each' będzie również liczyć' sayName', co nie jest dobre. –

+0

@Victor: Nie, nie możesz. –

+0

@Tomalak Geret'kal Spróbuj, działa. 'this' wewnątrz funkcji podczas wywoływania' this.sayName() 'jest tym samym, co obiekt otside, tzn.' teste'. –

Powiązane problemy