Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Metoda jako argument funkcji



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> ECMAScript
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
uzytkownikxd
Gość





PostWysłany: Pon Wrz 28, 2015 11:39 am  OP    Temat postu: Metoda jako argument funkcji Odpowiedz z cytatem Pisownia

Cześć,
chciałbym przesłać metodę jako pointer argumentu funkcji a następnie wywołać tę funkcję tak żeby móc wyświetlic wartość zmiennej 'value'. Jednak po wartosc this w tej metodzie jest Window object

Kod:


      var Obj = function()
      {
        var _t = this;
        
        this.value=5999;
      }
      
      Obj.prototype.fn2 = function(){
        
        console.log(this); // to daje Window object
        //console.log(this.value); //undefined
      };
      
      
      function func(ptr){
        ptr();
      }
      
      var item =  new Obj();
      
      func(item.fn2);


Powrót do góry
lethern



Dołączył: 09 Paź 2007
Posty: 1074

PostWysłany: Pon Wrz 28, 2015 11:53 am      Temat postu: Odpowiedz z cytatem Pisownia

Nie jest to rozwiązanie perfect, ale działa ;) (Może ktoś wrzuci wyższej klasy)
Kod:
var Obj = function()
{
    this.value=5999;
}

Obj.prototype.fn2 = function(){
    console.log(this.value);
};


function func(ptr){
    ptr();
}

var item =  new Obj();

func( item.fn2.bind(item) );

_________________
używasz Dev-Cpp? tools->editor options -> use tab character (włącz), smart tabs (wyłącz)... albo ściągnij np. Visual Studio C++ free.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 18736

PostWysłany: Pon Wrz 28, 2015 12:19 pm      Temat postu: Odpowiedz z cytatem Pisownia

uzytkownikxd:
"Pointer"? To ma polską nazwę, a do tego tutaj nie bardzo występuje - to nie C albo C++.

Alternatywnie dla narzędzi nie wspierających ECMAScriptu 5:
Kod:
func(function() {
    obj.fn2();
})
To rozwiązanie ma wadę wydajnościową: trzyma kontekst, w którym func została wywołana, co może nie być porządane w przypadku, gdy argument func będzie dłużej przechowywany.

Jeżeli możesz, to użyj metody bind z lodasha:
Kod:
func(_.bind(obj.fn2, obj))
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> ECMAScript Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.04011 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |