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
11112

edited Jan 14 '10 at 19:28

Rene%20Saarsoo's gravatar image

Rene Saarsoo ♦♦
1.1k101121


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.1k101121

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
2553310

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
lülita eelvaade

Jälgi seda küsimust

By Email:

Pärast sisselogimist saad tellida muudatuse teavitusi siit

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *kaldkiri* või __kaldkiri__
  • **paks kiri** või __paks kiri__
  • 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.
  • põhilised HTML märgendid on samuti toetatud

Pinu tööpakkumised

kõik pakkumised »

Küsimuse sildid:

×18
×5

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

nähtud: 2,860 korda

viimati uuendatud: Jan 15 '10 at 22:26

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