JavaScript: Malsamoj inter versioj

[nekontrolita versio][kontrolita revizio]
Enhavo forigita Enhavo aldonita
e pooureto
Linio 1:
[[Dosiero:JSDOM.gif|eta|Strukturo de ioj Ĝavaskriptaj objektoj.]]
'''JavaScript''' (esperantigite ''ĜavaSkripto'' aŭ ''JavaSkripto'') estas interpreta, [[objektema programado|objektema]] [[programlingvo]] kreita en [[1995]]. Ĝin rulasfunkciigas [[TTT-legilo]]j. Pro sekureco de personaj komputiloj ĝi ne skribas sur diskojn. Sekve ĝi nur modifas tion, kio aperas en la legilaj fenestroj.
 
Oficiale JavaScript-on difinas la [[normo]] ''ECMA-262'', alinome ''ECMAScript''. La nuna versio de tiu normo estas la tria, sed la kvina versio de tuitiu normo projektas anstataŭigi ĝin<ref>[https://developer.mozilla.org/en-US/docs/JavaScript/New_in_JavaScript/1.8.5 Ŝangoj en la versio 1.8.5 de JavaScript.]</ref>.
La diversaj TTT-legiloj sufiĉe bone konformaskonformiĝas al tiu normo, sed ili kaŭzas programajn komplikojn pro malsimilaj adaptoj de la dokumentobjekta modelo (normo ''dom''), tra kiu JavaScript manipulas la fenestrajn objektojn.
 
== Ekzemploj ==
 
JavaScript ne tipastipigas variablojn. VariablojVariablojn oni ne bezonas deklaritideklari por estike ili estu uzeblauzeblaj.
<source lang="javascript">
x = 1
Linio 15:
</source>
 
Vi povas vidi, ke, malsimile al Ĝavo, oni ne devas uzi punktokomojn inter komandoj, se la komandoj ne apartenas samanal linionla sama linio.
Krome, oni ne bezonas uzi punktokomon post komando, se la komando estas lasta.
 
Linio 23:
</source>
 
Vi povas vidi, ke funkcio eblaspovas esti argumento por alia funkcio (tra la argumento "x" oni povas meti funkcion).
 
Ekzistas ilo por stiri videblon de variablo ekster funkcio.
Ĉi tiu ilo estas la vorto <code>var</code>:
 
<source lang="javascript">
Linio 32:
</source>
 
La variablo <code>s</code> ne videblas ekster la funkcio g pro la komando "<code>var s</code>".
 
==Objektoj==
 
Objektoj aperas en la lingvo tre simple. Ĉiu variablo eblaspovas ekhavi anojn, post ĉi tio ĝi estos objekto:
 
<source lang="javascript">
g={};
g.surnamenomo=1
</source>
 
Sama senco:
<source lang="javascript">
g={surnamenomo:1}
</source>
Vi vidas objekton kun unu ano: surname<code>nomo</code>. Se vi provos akiri, ekzemple, <code>g.ageagho</code>, komputilo respondos "<code>undefined</code>" (nedifinita), sed ne "<code>null</code>" (malplena).
 
Ĉiu variablo, ne apartenanta objektonal objekto, estas reale ano de la speciala objekto ''<code>window</code>'' (t.n. "<code>global object</code>"). Do, oni povas akiri la variablon <code>g</code> ankaŭ per la nomo "<code>window.g</code>".
 
Ekzistas du vojoj por atingi anon de objekto. Ekzemple, por akiri la anon "surname<code>nomo</code>" de la objekto "g":
# g.surnamenomo
# g["surnamenomo"]
Dank'al la dua vojo oni povas rigardi akiron pri ano de objekto kiel funkcion, kies argumentoj estas la objekto kaj nomo de la ano:
<source lang="javascript">
function(g){
Linio 64:
Krome, la dua vojo permesas uzi kelkajn vortojn por nomi anojn:
<source lang="javascript">
americaameriko={"southsuda partparto":"CubaKubo","northnorda partparto":"USAUsono"};
alert(americaameriko["southsuda partparto"]);
</source>
Krome, la dua vojo permesas uzi nombrojn por nomi anojn (speciala speco de objektoj, "<code>Array</code>" = tabelo):
<source lang="javascript">
teamteamo=["JohnJohano","PaulPaŭlo","Ringo","GeorgeGeorgo"];
/*pli mallonga vojo por esprimi la komandon team=[0:"JohnJohano", 1:"PaulPaŭlo",2:"Ringo",3:"GeorgeGeorgo"];*/
alert(teamteamo[0]);
</source>
Ano de objekto eblaspovas esti funkcio. Funkcio povas sciikoni objekton, kies ano ĝi nun estas, per la speciala nomo ''<code>this</code>''.
 
=="Scope" kaj "Closure"==
Rigardu ekzemplon, en kiu funkcio naskiĝis interninterne de alia funkcio:
<source lang="javascript">
v=function(){
Linio 95:
([[Angla lingvo|angle]]: "spaco de nomoj").
 
"<code>Closure</code>" (angle: "adiaŭo") estas tio, kio uzas la nomspacon "<code>scope</code>". Ĝis morto de ĉiu "<code>closure</code>" la ilo "<code>Garbage collector</code>" (rubkolektilo) ne rajtas liberigi
memoron, kiun okupas "<code>scope</code>".
En la lasta ekzemplo "<code>closure</code>" estas rezulto de la funkcio v, kiu estas ankaŭeankaŭ funkcio.
 
==Naski objektojn per la vorto ''new''==
 
Kio okazos, se funkcio, kiu uzas la nomon ''<code>this</code>'', estas nenies ano?
La vorto ''<code>this</code>'' signifos novan objekton, kiu naskiĝos pro voko de la funkcio:
<source lang="javascript">
Womanvirino=function(){
this.clothingvesto="dressrobo";
};
a=new Womanvirino();
</source>
Atingi ĉi tiun objekton oni povas per la speciala vorto ''<code>new</code>'' (por ne konfuzi al rezulto de la funkcio, oni ĝin ne atingas per rekta voko "<code>a=Womanvirino()</code>", ĉar ĉi tiel oni eblaspovas atingi tion, kio lokislokiĝas post la vorto ''<code>return</code>'', anstataŭ tion, kion signifis la nomo ''<code>this</code>'' interninterne de la funkcio).
 
Do ĉiu funkcio estas kiel "<code>class</code>" en "Ĝavo", aperas parenceco inter objektoj.
Reale, ĉiu simpla tipo en Ĝavaskripto estas "<code>class</code>". Ekzistas objektaj "familioj":
#String = karaktraro
#Number = nombro
#Boolean = bulea
#Array = tabelo
#Function = funkcio
#Object = objekto
Ekzemple, ĉiu objekto havas la anon <code>toString()</code>, kaj la primitivaj tipoj ne estas escepto (malkiel Ĝave):
<source lang="javascript">
a=3;