Edit:
Joo ongelma muuttukin hieman.
var muuttuja = this.metodi1("lol", "xd"); this.metodi1 = function(param1, param2){ return "lol"; }
Onko tässä rakenteessa joku vika? Kun toi valittaa tyyliin: "metodi1 ei ole funktio". Ilman parametreja toi kutsu toimis näin:
var muuttuja = this.metodi1;
Miks ei toimi parametrejen kanssa?
Kutsut metodia, mutta et ole vielä määritellyt sitä. Siirrä kutsu määrittelyn alle.
Matso kirjoitti:
Ilman parametreja toi kutsu toimis näin:
var muuttuja = this.metodi1;
Tuo ei ole kutsu, this.metodi1()
on. Ilman sulkuja se on pelkkä viittaus kyseiseen arvoon, joka voi olla myös funktio.
funktio kirjoitti:
Kutsut metodia, mutta et ole vielä määritellyt sitä. Siirrä kutsu määrittelyn alle.
Tolla järjestykselä ei pitäs olla mitään väliä. Voit vaikka itse kokeilla:
<script type="text/javascript"> alert(a()); function a(){ return "lol"; } </script>
funktio kirjoitti:
Matso kirjoitti:
Ilman parametreja toi kutsu toimis näin:
var muuttuja = this.metodi1;Tuo ei ole kutsu,
this.metodi1()
on. Ilman sulkuja se tarkoittaa sitä arvoa itseään, joka voi olla myös funktio.
Noin se kuitenkin toimii oikein, ja parametrejen kanssa ei toimi vaikka miten päin laittaa. Se vaan valittaa että se ei ole funktio.
Matso kirjoitti:
funktio kirjoitti:
Kutsut metodia, mutta et ole vielä määritellyt sitä. Siirrä kutsu määrittelyn alle.
Tolla järjestykselä ei pitäs olla mitään väliä. Voit vaikka itse kokeilla...
Tuo esimerkki on erilainen, siinä funktiolle annetaan nimi. Jos tallennat nimettömän funktion muuttujaan (tai olion ominaisuudeksi, kuten tässä tapauksessa), sitä ei voi käyttää ennen kuin se on määritelty.
this.metodi1 = function(param1, param2){ return "lol"; }
Kieltä sen enempää tutkiskelematta tuo näyttää aika oudolta? Minun silmääni näyttäisi ainakin paremmalta näin:
function metodi1(param1, param2) { ... }
Hakoulinen kirjoitti:
this.metodi1 = function(param1, param2){ return "lol"; }Kieltä sen enempää tutkiskelematta tuo näyttää aika oudolta? Minun silmääni näyttäisi ainakin paremmalta näin:
function metodi1(param1, param2) { ... }
Kyse on javascriptin olio ohjelmoinnista jossa luokan metodin voi määritellä noin. Metodin vois myös määritellä esim:
this.metodi1 = metodi1; function metodi1(){ //... }
Tää JS:n OOP on aika outoa.
Matso kirjoitti:
... luokan metodin voi määritellä noin.
JavaScriptissä ei tosin ole luokkia.
Matso kirjoitti:
parametrejen kanssa ei toimi vaikka miten päin laittaa
Näin päin ei toimi minullakaan:
js> function Foo() { var temp = this.method("z"); alert(temp); this.method = function (x) { return true }; } js> new Foo 2: TypeError: this.method is not a function
Mutta tämä kyllä toimii:
js> function Foo() { this.method = function (x) { return true }; var temp = this.method("z"); alert(temp); } js> new Foo true [object Object]
funktio kirjoitti:
Matso kirjoitti:
... luokan metodin voi määritellä noin.
JavaScriptissä ei tosin ole luokkia.
Eipä kai sitten Javascriptissä ole metodeitakaan. Ne on vaa funktioita. Kuitenkin on rakenteita jotka toimii täysin samalla tapaa kun luokat joten kutsun niitä luokiksi.
Joo ei se näköjään toimikaan tolleen väärin päin, mutta se ei ollut edes tossa alkuperäsessä ongelmana, se oli joku muu ongelma. Oikeestaan koodasin koko jutun alusta asti uusiks :D
funktio kirjoitti:
JavaScriptissä ei tosin ole luokkia.
Tuohan ei nyt pidä paikkaansa. Kenties tunnetuin JavaScript-luokka on nimeltään Ajax.
JavaScriptissä ei tosiaan ole luokkia, ainoastaan olioita. Uudet oliot luodaan kloonaamalla olemassaolevia olioita. Toki monissa nykyajan JS-frameworkeissa (Prototype ftw!) emuloidaan varsin mallikkaasti perinteistä luokkiin perustuvaa olio-ohjelmointia, mutta kauniin kuoren alla on edelleen tuo prototyypeihin perustuva oliopläjäys. Itse asiassa JavaScriptissä kaikki on olioita, myös funktiot.
Ja tuolla Ajax-luokalla varmaankin hait takaa jonkin frameworkin toteutusta. XmlHttpRequest kun ei taida vieläkään olla minkään virallisen standardin mukainen tekniikka.
Edit: Hyvä linkki aiheesta: http://en.wikipedia.org/wiki/Prototype-based_programming
AJAX on vain muotisanahirviönimitys tietyistä toiminnoista yhteiskäytössä, joistaa yksi on esimerkiksi tiedon lataamisesta sivulle aiheuttamatta sivun täydellistä uudelleenlatautumista (joka onnistuu mm. XmlHttpRequestilla). AJAXin alle luokitellut eri tekniikat sun muut olivat olemassa jo hyvän aikaa ennen kuin nimitys keksittiin.
AJAX ei siis ole luokka, eikä se ole framework, eikä se ole frameworkin toteutus. Se on vähän samantapainen tyhjänpäiväinen sana kuin Web 2.0: keinotekoista jaottelun luomista.
Olga kirjoitti:
JavaScriptissä ei tosiaan ole luokkia, ainoastaan olioita.
Kirja JavaScript Toolkit kertoo asian lyhykäisyydessään näin:
"Luokka(classes) ryhmittelee samankaltaiset oliot, ja se määrittelee, mitä tietoa ja toimintoja kaikki luotavat oliot sisältävät. Virallisen määritelmän mukaan oliot ovat luokan ilmentymiä (instances), jotka toteuttavat luokan käytännössä."
Merri kirjoitti:
Se on vähän samantapainen tyhjänpäiväinen sana kuin Web 2.0: keinotekoista jaottelun luomista.
Tästä tuli mieleen toinen JavaScript hömpötys-sana, "DHTML-ohjelmointi", joka antaa virheellisen kuvan ikäänkuin omasta ohjelmoitikielestä.
@Merri: Jos luet viestini uudelleen, ymmärrät varmaan mitä tarkoitin.
@Pekka Mansikka: Tuohan on kertoo nimenomaan luokan määritelmän, eikä JavaScript siihen sovi.
Täällä on sanottu aika osuvasti:
Paul Graham kirjoitti:
Basically, what "Ajax" means is "Javascript now works."
Pekka Mansikka kirjoitti:
Kirja JavaScript Toolkit kertoo asian lyhykäisyydessään näin:
En ole lukenut, mutta kuulemma suurin osa JavaScript-kirjoista on todella huonoja.
Aihe on jo aika vanha, joten et voi enää vastata siihen.