DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   (X)HTML, JavaScript, DHTML, XML, CSS (http://www.devprotalk.com/forumdisplay.php?f=8)
-   -   javascript - setTimeout() iz objekta (http://www.devprotalk.com/showthread.php?t=3953)

dee 08. 11. 2007. 17:48

javascript - setTimeout() iz objekta
 
imam kod otprilike ove strukture:

Kôd:

function Objekt()
{
this.funkcija1 = funkcija1;
this.funkcija2 = funkcija2;
this.nesto = "bla";
.
.
.
function funkcija1(){
.
.
.
this.funkcija2();
}

function funkcija2(){
.
.
.
setTimeout("this.funkcija2()" , 10);
}

}

var Instanca = new Objekt();

this.funkcija2() kao argument setTimeout-a ne radi. ako unutra napisem Instanca.funkcija2() tad radi. cini li mi se ili je ovo malo blesavo? (iz funkcije1, poziv this.funkcija2(); radi)

noviKorisnik 08. 11. 2007. 21:47

The 'this' problem
Ako napišeš 'setTimeout("this.funkcija2()" , 10);' to odlaže evaluaciju string izraza za 10 ms, kada se this iz stringa pridružuje window objektu.

ivanhoe 09. 11. 2007. 00:50

ovo je klasican problem sa this... ovo mozes da resis sa closure-om:

Kôd:

function funkcija2(){
  var self = this;
  var closure = function(){  self.funkcija1();  };
  this.timer = window.setTimeout(closure, 10);
}


dee 09. 11. 2007. 14:50

znaci, ako ispravno shvacam, point je uzeti 'onaj this' koji je unutar funkcije (a ne unutar npr. setTimeout/addEventListener argument liste) i staviti u closure jer ce tad bit vezan za konkretan objekt umjesto uz window? right?

noviKorisnik 09. 11. 2007. 15:14

Izgleda da može i jednostavnije, jer je prvi argument u setTimeoutu ili string za evaluaciju (koja se vrši pri isteku čekanja) ili referenca na funkciju (koja postoji u trenutku zadavanja tajmauta), pa ako proslediš referencu na funkciju nema frke - evo test -
Kôd:

funkcija2 = function () {
    alert ('ovaj nam ne treba ovaj put, sorry');
}
objekat = {
    funkcija1:  function () {
        setTimeout (this.funkcija2, 10);
    },
    funkcija2:  function () {
        alert ('uspeo poziv, bravo');
    }
}
objekat.funkcija1 ();

Znači, samo referenca umesto stringa.

LiquidBrain 09. 11. 2007. 15:17

Ovaj javascript je postao preterano ruzan...

ivanhoe 09. 11. 2007. 15:50

ovo je klasican javascript, samo se malo stil pisanja koda promenio... umesto objekat.prototype.neka_funkcija sad je uobicajeno da se koristi notacija kao za asocijativni niz

LiquidBrain 09. 11. 2007. 15:56

Off Topic:
Ma znam da je klasican js, samo sam konstatovao na glas... zasto ljudi vishe ne koriste:

Kôd:

move ax,0xFFFFFFFF;
cmp al, 0;
jne nije_isto;

mnogo je jednostavnije bilo... sada se nekako sve zakomplikovalo... Long Live Assembly

:P

bluesman 09. 11. 2007. 16:05

Off Topic:
Citat:

Originalno napisao LiquidBrain (Napišite 46445)
Ovaj javascript je postao preterano ruzan...

Zato što ga preterano komplikuju :) Osim xmlHttprequest, javascript je skoro isti kao 1996 godine... tada nije bilo fensi prototype... Prave od toga ono što on nije, ali to je neka druga priča... da ne kvarimo temu.

dee 09. 11. 2007. 18:32

Citat:

Originalno napisao noviKorisnik (Napišite 46444)
Izgleda da može i jednostavnije, jer je prvi argument u setTimeoutu ili string za evaluaciju (koja se vrši pri isteku čekanja) ili referenca na funkciju (koja postoji u trenutku zadavanja tajmauta), pa ako proslediš referencu na funkciju nema frke - evo test -
Kôd:

funkcija2 = function () {
    alert ('ovaj nam ne treba ovaj put, sorry');
}
objekat = {
    funkcija1:  function () {
        setTimeout (this.funkcija2, 10);
    },
    funkcija2:  function () {
        alert ('uspeo poziv, bravo');
    }
}
objekat.funkcija1 ();

Znači, samo referenca umesto stringa.

ali izgleda da rekurzija ne radi.... naime, setTimeout (this.funkcija2, 10); unutar objekt.funkcija2 opet vraca globalnu funkciju2


Vreme je GMT +2. Trenutno vreme je 07:28.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.