logi sisse meist KKK

Üheks kõige segasemaks osaks on jäänud javascripti OO pool. Google abil otsides võib leida küll seda et klasside loomine käib läbi funktsiooni ning meetodite lisamine antud klassile prototype abil. Kuid kuidas näiteks on pärimisega ja polymorphismiga? Leidub küll erinevaid näiteid kuidas seda teostada omaloodud skripti abil, kuid midagi ühest stiili ei leidu. Ehk oskab keegi suunata mõnele lehele, mille tulemusi üldjuhul ka aluseks võetakse?

küsitud Jan 14 '10 at 19:12

Risti's gravatar image

Risti
112

edited Jan 14 '10 at 19:28

Rene%20Saarsoo's gravatar image

Rene Saarsoo ♦♦
1.1k1720


Su mulje on õige: JavaScriptis polegi mingit ühest OOP stiili välja kujunenud.

JavaScript ise sisaldab teatud komplekti primitiivseid tööriistu, mille abil saab objektidega praktiliselt kõiki OOP-i jaoks vajalikke trikke teha, aga puhtalt nende sisseehitatud vahendite kasutamine on üksjagu ebamugav. Seetõttu on välja töötatud mitmeid abivahendeid mugavamaks OOP-imiseks. Häda on aga selles, et neid abivahendeid on hulgim - pea igal JavaScripti raamistikul on neist oma versioon.

Samas, kui sa kasutad mõnda JavaScripti raamistikku või suuremat teeki (ja kes tänepäeval ei kasutaks?), siis tõenäoliselt on seal juba mingi lahendus olemas - peaksid vähemasti alustuseks kasutama seda.

Muidugi tasuks kursis olla ka sellega kuidas kogu seda OOP asja puhtalt JavaScripti enda vahenditega teha...

Ma kardan, et mingit ühte ja ülevaatlikut linki polegi, aga sellest StackOverflow teemast peaksid leidma hulgim päris häid viiteid.

Lõppeks kipun ma aga arvama, et objekt-orienteeritud programmeerimise oskus annab vaid killukese JavaScripti maailmapildist. Üllatavalt suur osa on hoopis funktsionaalsel programmeerimisel. Ilma teadmisteta anonüümsetest funktsioonidest ja sulunditest pole päriselt võimalik ka JavaScripti OOP poolest aru saada.

link

vastatud Jan 14 '10 at 19:49

Rene%20Saarsoo's gravatar image

Rene Saarsoo ♦♦
1.1k1720

edited Jan 14 '10 at 20:48

Mina olen aja jooksul leidnud, et JavaScripti enda vahendid on juba piisavalt head ning "kolmanda pakkuja" poolt määratud OOP süntaksi sissetoomine (näiteks Prototype Class) teeb asja pigem halvemaks kui paremaks. Lõppude lõpuks ei tee sellised pseudo OOP vahendid muud, kui teisendavad sinu koodi ümber "päris" JavaScriptiks - miks siis mitte jätta need lisasammud (CPU kulu!) ära ja teha kohe asju õigel viisil.

Probleem ei seisnegi tegelikult selles, et mis on õige ja mis vale, vaid selles, et kiputakse teadmatusest teistest keeltest üle tooma võtteid, mille asemel on JavaScriptis ette nähtud hoopis teistsugused lahendused. Näiteks seesama klasside teema - JavaScriptis ei olegi üldse klasse, selle asemel on objektide loomiseks konstruktorfunktsioonid. Hetkel laiemalt saadaolevas JavaScriptis (versioon 1.5) on class reserveeritud termin ja ei midagi muud. Keele elementide hulgas seda pole ning ise ka kasutada ei tohi.

JavaScript on samas piisavalt dünaamiline keel, et igaüks saab defineerida endale sobiva OOP lahenduse ise, kuid tõstaksin hea meelega esile Rene vastust eespool, mis ütleb, et JavaScript on palju rohkem kui OOP. Sulundid, kõrgemat-järku funktsioonid ja objektide muutmine run-time on asjad, mis teevad JavaScriptist killer-keele, mitte pärimine ja polümorfism.

Huvilistele soovitaksin oma work in progress JavaScript käsiraamatut aadressilt http://jscode.org/

link

vastatud Jan 15 '10 at 22:26

Andris's gravatar image

Andris
25317

JavaScript'i OO on üles ehitatud "tuntud" OO-keeltest (nagu Oberon ;-) mõnevõrra erinevate printsiipide otsa. Märksõna on Self. Seega on ka klassikaline idiomaatika Self'ilaadsetest keeltest pärit.

See, kuidas inimesed Internetist oma JavaScript'i kirjutavad, võib väga kole olla. Nii, nagu Algolis "sai" semikoolonitega Fortranit kirjutada, "saab" JavaScript'is semikoolonitega VB'd kirjutada. Ära lase end sellest häirida.

link

vastatud Jan 15 '10 at 20:54

dig's gravatar image

dig
17415

Sinu vastus
toggle preview

Jälgi seda küsimust

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or __italic__
  • **bold** or __bold__
  • link:[tekst](http://url.com/ "pealkiri")
  • pilt?![alt tekst](/path/img.jpg "pealkiri")
  • nummerdatud nimekiri: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Pinu tööpakkumised

kõik pakkumised »

Sildid:

×16
×5

küsitud: Jan 14 '10 at 19:12

nähtud: 911 korda

viimati uuendatud: Jan 15 '10 at 22:26

Litsents: Creative Commons Attribution License | Kontakt: info@pinu.ee