Download - Limbajul JavaScript: o prezentare generală
![Page 1: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/1.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
o prezentare generala a limbajului JavaScript
Tehnologii Web
Programare Web – supliment
![Page 2: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/2.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
“Un arcas bun atinge tinta chiar inainte de a trage.”
Ch’Ao Pu-Che
![Page 3: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/3.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Inventat de Brendan Eich (1995)
denumit initial LiveScript
istoric
![Page 4: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/4.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Implementat in premiera de browser-ul Netscape Navigator
istoric
![Page 5: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/5.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Adaptat de Microsoft: JScript (1996)
istoric
![Page 6: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/6.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Standardizat in 1997 de ECMA European Computer Manufacturers Association
ECMAScript ECMA-262
www.ecma-international.org
istoric
![Page 7: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/7.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Standardizat in 1997 de ECMA European Computer Manufacturers Association
ECMAScript
versiunea standardizata actuala: 5.1 (iunie 2011) versiunea in lucru: 6.0 (în curând)
www.ecma-international.org/publications/standards/Ecma-262.htm
istoric
![Page 8: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/8.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Limbaj de tip script (interpretat)
caracteristici
![Page 9: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/9.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Limbaj de tip script (interpretat)
destinat sa manipuleze, sa automatizeze si sa integreze facilitatile oferite
de un anumit sistem
caracteristici
![Page 10: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/10.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Limbaj de tip script (interpretat)
nu necesita intrari/iesiri in mod implicit
caracteristici
![Page 11: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/11.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Cum putem executa programele JavaScript?
![Page 12: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/12.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Mediu de executie (host-environment)
navigator Web
permite rularea de aplicatii Web la nivelul unei platforme (un sistem de operare)
desktop (e.g., Windows 8)
mobil (Android, iOS, WP7, WP8) …
caracteristici
![Page 13: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/13.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Mediu de executie (host-environment)
navigator Web
“injectarea” de cod JavaScript in documentele (X)HTML via elementul <script>
caracteristici
![Page 14: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/14.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Mediu de executie (host-environment)
navigator Web
“injectarea” de cod JavaScript in documentele (X)HTML via elementul <script>
cod extern vs. cod inclus in pagina Web
caracteristici
![Page 15: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/15.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Mediu de executie (host-environment)
platforma de dezvoltare a aplicatiilor
e.g., Flex/AIR
caracteristici
![Page 16: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/16.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Mediu de executie (host-environment)
software de sine-statator
Adobe Creative Suite, UltraEdit etc.
caracteristici
![Page 17: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/17.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Mediu de executie (host-environment)
procesor (engine) independent
exemplificare: Yahoo! Widget Engine
caracteristici
![Page 18: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/18.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Mediu de executie (host-environment)
componente ale sistemului de operare
Dashboard – Mac OS X Sidebar – Windows Vista/7
caracteristici
![Page 19: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/19.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Mediu de executie (host-environment)
server Web
exemplu tipic: node.js
caracteristici
![Page 20: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/20.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Cuvinte rezervate:
break else new var case finally return void catch
for switch while continue function this with default
if throw delete in try do instanceof typeof
caracteristici: sintaxa
![Page 21: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/21.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Alte cuvinte rezervate:
abstract enum int short boolean export interface
static byte extends long super char final native
synchronized class float package throws const
goto private transient debugger implements
protected volatile double import public
caracteristici: sintaxa
![Page 22: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/22.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Number
reprezentare in dubla precizie
stocare pe 64 biti
caracteristici: tipuri de date
![Page 23: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/23.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
String
secvente de caractere Unicode
fiecare caracter ocupa 16 biti
caracteristici: tipuri de date
![Page 24: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/24.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Boolean
secvente ce se pot evalua ca fiind true/false
caracteristici: tipuri de date
![Page 25: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/25.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Object
Function Array Date
RegExp
si altele
caracteristici: tipuri de date
![Page 26: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/26.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Null
semnifica “nici o valoare”
caracteristici: tipuri de date
![Page 27: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/27.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Undefined
are semnificatia “nici o valoare asignata inca”
caracteristici: tipuri de date
![Page 28: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/28.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Nu exista valori intregi
caracteristici: tipuri de date
![Page 29: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/29.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Nu exista valori intregi
convertirea unui sir in numar: parseInt ()
parseInt ("123") 123 parseInt ("11", 2) 3
caracteristici: tipuri de date
indica baza de numeratie
![Page 30: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/30.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Operatii avansate cu numere se pot realiza via obiectul predefinit Math
caracteristici: tipuri de date
![Page 31: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/31.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Operatii avansate cu numere se pot realiza via obiectul predefinit Math
constante predefinite:
Math.PI
Math.E
Math.LN10
etc.
caracteristici: tipuri de date
![Page 32: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/32.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Operatii avansate cu numere se pot realiza via obiectul predefinit Math
metode:
Math.abs(x) Math.ceil(x) Math.cos(x) Math.exp(x) Math.floor(x)
Math.log(x) Math.max(x, ..) Math.min(x, ..) Math.pow(x, y)
Math.random() Math.round(x) Math.sin(x) Math.sqrt(x) etc.
caracteristici: tipuri de date
![Page 33: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/33.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
“Valoarea” NaN (“not a number”)
parseInt ("Salut") NaN isNaN (NaN + 3) true
caracteristici: tipuri de date
![Page 34: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/34.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Valori speciale:
Infinity
–Infinity
caracteristici: tipuri de date
![Page 35: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/35.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Un caracter reprezinta un sir de lungime 1
caracteristici: tipuri de date
![Page 36: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/36.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Sirurile sunt obiecte
"Salut".length 5
caracteristici: tipuri de date
![Page 37: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/37.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Metode pentru siruri:
s.charAt(pos) s.charCodeAt(pos) s.concat(s1, ..)
s.indexOf(s1, start)
s.match(regexp) s.replace(search, replace)
s.slice(start, end) s.split(separator, limit)
s.substring(start, end)
s.toLowerCase() s.toUpperCase()
etc.
caracteristici: tipuri de date
![Page 38: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/38.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Valorile 0, "", NaN, null, undefined
sunt interpretate ca fiind false
!!234 true
caracteristici: tipuri de date
![Page 39: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/39.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Variabilele se declara cu var
var marime;
var numeAnimal = "Tux";
variabilele declarate fara valori asignate,
se considera undefined
caracteristici: variabile
![Page 40: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/40.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Daca nu se foloseste var, atunci variabila este considerata globala
de evitat asa ceva!
caracteristici: variabile
![Page 41: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/41.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Valorile sunt “legate” tardiv la variabile (late binding)
caracteristici: variabile
![Page 42: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/42.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Mai nou, exista posibilitatea marginirii domeniului de vizibilitate (scope) via let
var x = 5;
var y = 0;
console.log (let (x = x + 10, y = 12) x + y); // 27
console.log (x + y); // 5
caracteristici: variabile
![Page 43: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/43.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Pentru numere: + – * / %
De asignare: += –= *= /= %=
Incrementare & decrementare: ++ – –
Concatenare de siruri: "Java" + "Script" "JavaScript"
caracteristici: operatori
![Page 44: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/44.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Conversia tipurilor se face “din zbor”
"3" + 4 + 5 345 3 + 4 + "5" 75
adaugând un sir vid la o expresie, o convertim pe aceasta la string
caracteristici: operatori
![Page 45: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/45.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Comparatii: < > <= >= (numere & siruri)
egalitatea se testeaza cu == si !=
1 == true true
caracteristici: operatori
![Page 46: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/46.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Comparatii: < > <= >= (numere & siruri)
egalitatea se testeaza cu == si !=
1 == true true
a se folosi: 1 === true false
caracteristici: operatori
inhiba conversia tipurilor de date
![Page 47: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/47.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Aflarea tipului unei expresii: operatorul typeof typeof "Tux" string
caracteristici: operatori
![Page 48: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/48.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Operatorii logici && si ||
var nume = unNume || "Implicit";
caracteristici: operatori
![Page 49: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/49.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Operatorul de test ? :
var prezenta = (studenti > 33) ? "Prea multi" : "Cam putini…";
caracteristici: operatori
![Page 50: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/50.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Testare: if … else, switch pentru switch, sunt permise expresii la fiecare case
(testarea se realizeaza cu operatorul ===)
switch (2 + 3) { /* sunt permise expresii */
case 4 + 1 : egalitate ();
break;
default : absurd (); // nu se apeleaza niciodata
}
caracteristici: control
![Page 51: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/51.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Ciclare: while, do … while, for
do {
var nume = preiaNume ();
} while (nume != "");
for (var contor = 0; contor < 33; contor++) {
// de 33 de ori…
}
caracteristici: control
![Page 52: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/52.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Exceptii: try … catch … finally
try { // Linii "periculoase" ce pot cauza exceptii } catch (eroare) { // Linii executate la aparitia unei/unor exceptii } finally { // Linii care se vor executa la final }
caracteristici: control
![Page 53: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/53.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Exceptii: try … catch … finally
try { // Linii "periculoase" ce pot cauza exceptii } catch (eroare) { // Linii executate la aparitia unei/unor exceptii } finally { // Linii care se vor executa la final }
emiterea unei exceptii: throw
throw new Error ("O eroare de-a noastra!...");
caracteristici: control
![Page 54: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/54.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Perechi nume—valoare
caracteristici: obiecte
![Page 55: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/55.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Perechi nume—valoare
tabele de dispersie (hash) in C/C++ tablouri asociative in Perl, PHP sau Ruby
HashMaps in Java
caracteristici: obiecte
![Page 56: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/56.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Perechi nume—valoare
numele este desemnat de un sir de caractere
valoarea poate fi de orice tip
caracteristici: obiecte
![Page 57: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/57.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Obiect colectie de proprietati, avand mai multe atribute
proprietatile pot contine alte obiecte, valori primitive sau metode
caracteristici: obiecte
![Page 58: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/58.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Global
Object
Function
Array
String
Boolean
Number
Math
Date
Regex
caracteristici: obiecte predefinite
![Page 59: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/59.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Create prin intermediul operatorului new:
var ob = new Object(); var ob = { }; // echivalent cu linia anterioara
caracteristici: obiecte
![Page 60: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/60.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Create prin intermediul operatorului new:
var ob = new Object(); var ob = { }; // echivalent cu linia anterioara
caracteristici: obiecte
se prefera aceasta sintaxa
![Page 61: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/61.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Accesarea proprietatilor – operatorul .
ob.nume = "Tux";
var nume = ob.nume;
caracteristici: obiecte
![Page 62: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/62.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Accesarea proprietatilor:
ob.nume = "Tux";
var nume = ob.nume;
echivalent cu:
ob["nume"] = "Tux";
var nume = ob["nume"];
caracteristici: obiecte
![Page 63: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/63.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Declarare + asignare:
var pinguin = {
nume: "Tux",
proprietati: {
culoare: "verde",
marime: 17
}
}
caracteristici: obiecte
![Page 64: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/64.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Accesare:
pinguin.proprietati.marime 17
pinguin["proprietati"]["culoare"] verde
caracteristici: obiecte
![Page 65: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/65.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Iterarea proprietatilor – considerate chei:
var pinguin = { 'nume': 'Tux', 'marime': 17 };
for (var proprietate in pinguin) {
afiseaza (proprietate + ' = ' + pinguin[proprietate]);
}
caracteristici: obiecte
![Page 66: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/66.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Tipuri speciale de obiecte
proprietatile (cheile) sunt numere,
nu siruri de caractere
caracteristici: tablouri
![Page 67: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/67.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Se poate utiliza sintaxa de la obiecte:
var animale = new Array (); animale[0] = "pinguin"; animale[1] = "omida"; animale[2] = "pterodactil";
animale.length 3
caracteristici: tablouri
![Page 68: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/68.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Se poate utiliza sintaxa de la obiecte:
var animale = new Array (); animale[0] = "pinguin"; animale[1] = "omida"; animale[2] = "pterodactil";
animale.length 3
notatie alternativa – preferata:
var animale = ["pinguin", "omida", "pterodactil"];
caracteristici: tablouri
![Page 69: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/69.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Tablourile pot avea “gauri” (sparse arrays): var animale = ["pinguin", "omida", "pterodactil"];
animale[33] = "om";
animale.length 34 typeof animale[13] undefined
caracteristici: tablouri
![Page 70: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/70.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Tablourile pot avea “gauri” (sparse arrays): var animale = ["pinguin", "omida", "pterodactil"];
animale[33] = "om";
animale.length 34 typeof animale[13] undefined
pentru a adauga elemente putem recurge la: animale[animale.length] = altAnimal;
caracteristici: tablouri
![Page 71: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/71.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
var vector = [ ];
vector[0] = "zero";
vector[new Date().getTime()] = "now";
vector[3.14] = "pi";
for (var elem in vector) {
console.log ("vector[" + elem + "] = " + vector[elem] +
", typeof( " + elem +") == " + typeof (elem));
}
caracteristici: tablouri – exemplu
adaptare dupa John Kugelman (2009)
![Page 72: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/72.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
rezultatul obtinut in urma rularii programului JavaScript via JS Bin
![Page 73: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/73.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Interari:
for (var it = 0; it < animale.length; it++) {
// de prelucrat animale[it]
}
caracteristici: tablouri
![Page 74: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/74.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Interari:
for (var it = 0; it < animale.length; it++) {
// de prelucrat animale[it]
}
// varianta mai buna
for (var it = 0, lung = animale.length; it < lung; it++) {
// de prelucrat animale[it]
}
caracteristici: tablouri
de ce?
![Page 75: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/75.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Elementele pot apartine unor tipuri de date eterogene
var animale = [33, "vierme", false, "gaga"];
caracteristici: tablouri
![Page 76: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/76.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Metode utile:
a.toString() a.concat(item, ..) a.join(sep)
a.pop() a.push(item, ..) a.reverse()
a.shift() a.unshift([item]..) a.sort(cmpfn) a.splice(start, delcount, [item]..)
etc.
caracteristici: tablouri
![Page 77: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/77.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Definite via function
function transformaPixeliInPuncte (px) { var puncte = px * 300; return puncte; }
caracteristici: functii
![Page 78: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/78.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Daca nu este intors nimic in mod explicit, valoarea de retur se considera undefined
caracteristici: functii
![Page 79: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/79.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Parametrii pot lipsi, fiind considerati undefined
caracteristici: functii
![Page 80: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/80.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Pot fi transmise mai multe argumente, cele in surplus fiind ignorate
transformaPixeliInPuncte (10, 7) 3000
caracteristici: functii
![Page 81: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/81.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Argumentele primite de o functie se acceseaza via tabloul arguments:
function aduna () {
var suma = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
suma += arguments[i];
}
return suma;
}
caracteristici: functii
![Page 82: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/82.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Functiile sunt tot obiecte
astfel, pot fi specificate functii anonime
caracteristici: functii
expresii lambda
![Page 83: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/83.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Functiile sunt tot obiecte
astfel, pot fi specificate functii anonime
in acest sens, JavaScript este un limbaj functional
caracteristici: functii
expresii lambda
![Page 84: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/84.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
var media = function () { // calculul mediei a N numere
var suma = 0;
for (var iter = 0,
lung = arguments.length;
iter < lung; iter++) {
suma += arguments[iter];
}
return suma / arguments.length;
};
caracteristici: functii
![Page 85: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/85.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
![Page 86: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/86.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
precizati ce efect vor avea liniile de cod urmatoare: console.log ( typeof (media) );
console.log ( media() );
![Page 87: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/87.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
variabila media este de tip function
apelul media() intoarce valoarea NaN
![Page 88: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/88.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co /* determina numarul caracterelor din nodurile text
ale arborelui DOM-ului asociat unui document */ function numaraCaractereDinNoduriText (element) {
if (element.nodeType == 3) { // nod text (din DOM)
return element.nodeValue.length;
}
var contor = 0;
// recursiv, numaram caracterele fiecarui nod copil
// al arborelui DOM cu radacina ‘element’
for (var it = 0, copil; copil = element.childNodes[it]; it++) {
contor += numaraCaractereDinNoduriText (copil);
}
return contor;
}
vezi cele discutate la DOM
functii recursive in JavaScript
![Page 89: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/89.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
// varianta folosind functii anonime var nrCaractDoc = (function (element) {
if (element.nodeType == 3) { // nod text
return element.nodeValue.length;
}
var contor = 0;
for (var it = 0, copil; copil = element.childNodes[it]; it++) {
contor += arguments.callee (copil);
}
return contor;
}) (xml.root);
furnizeaza care-i functia apelanta
![Page 90: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/90.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Exemplificare: dorim sa procesam – via functii –
caracteristici ale unor animale
caracteristici: de la functii la clase
![Page 91: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/91.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
function creeazaAnimal (nume, marime) { return { nume: nume, marime: marime } } function oferaNume (animal) { return animal.nume; } function oferaMarime (animal) { return animal.marime; }
caracteristici: de la functii la clase
![Page 92: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/92.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
function creeazaAnimal (nume, marime) { return { nume: nume, marime: marime } } function oferaNume (animal) { return animal.nume; } function oferaMarime (animal) { return animal.marime; }
var tux = creeazaAnimal ("Tux", 17);
oferaMarime (tux) 17
caracteristici: de la functii la clase
![Page 93: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/93.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
O “clasa” referitoare la animale:
function creeazaAnimal (nume, marime) { return { nume: nume, // date-membre marime: marime, oferaNume: function () { // metoda return animal.nume; }, oferaMarime: function () { // metoda return animal.marime; } }
caracteristici: de la functii la clase
![Page 94: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/94.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Apelarea metodelor definite:
var tux = creeazaAnimal ("Tux", 17);
tux.oferaMarime() 17
caracteristici: de la functii la clase
![Page 95: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/95.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Apelind insa o functie fara notatia cu “.”, nu obtinem rezultatul scontat:
var marimea = tux.oferaMarimea;
oferaMarimea () undefined
caracteristici: de la functii la clase
![Page 96: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/96.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Apelind insa o functie fara notatia cu “.”, nu obtinem rezultatul scontat:
var marimea = tux.oferaMarimea;
oferaMarimea () undefined
obiectul curent (“this”) este setat ca fiind obiectul global
(in browser, reprezinta fereastra curenta in care este redat documentul: this window)
caracteristici: de la functii la clase
![Page 97: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/97.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
function Animal (nume, marime) {
this.nume = nume; // date-membre
this.marime = marime;
this.oferaNume = function () { // metoda
return this.nume;
};
this.oferaMarime = function () { // metoda
return this.marime;
};
}
caracteristici: de la functii la clase
creational pattern
![Page 98: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/98.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
function Animal (nume, marime) {
this.nume = nume; // date-membre
this.marime = marime;
this.oferaNume = function () { // metoda
return this.nume;
};
this.oferaMarime = function () { // metoda
return this.marime;
};
}
caracteristici: de la functii la clase
clase – utilizarea constructorilor
![Page 99: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/99.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
function Animal (nume, marime) {
this.nume = nume; // date-membre
this.marime = marime;
this.oferaNume = function () { // metoda
return this.nume;
};
this.oferaMarime = function () { // metoda
return this.marime;
};
}
caracteristici: de la functii la clase
clase – utilizarea constructorilor
var tux = new Animal ("Tux", 17); // instantierea unui obiect
![Page 100: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/100.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Operatorul new creaza un nou obiect vid si apeleaza functia specificata cu this setat pe acest obiect
aceste functii se numesc constructori, trebuie apelate via new
si, prin conventie, au numele scris cu litera mare
caracteristici: functii & obiecte
![Page 101: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/101.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Metodele pot fi declarate si in exteriorul constructorului
function oferaNumeAnimal () {
return this.nume;
} function Animal (nume, marime) {
this.nume = nume;
this.marime = marime;
this.oferaNume = oferaNumeAnimal;
}
caracteristici: functii & obiecte
![Page 102: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/102.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Structura unei clase poate fi extinsa ulterior, folosind proprietatea prototype
caracteristici: prototipuri
![Page 103: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/103.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Structura unei clase poate fi extinsa ulterior, folosind proprietatea prototype
un prototip e o proprietate oferind o legatura ascunsa
caracteristici: prototipuri
![Page 104: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/104.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Structura unei clase poate fi extinsa ulterior, folosind proprietatea prototype
daca se incearca accesarea unui element inexistent in cadrul unui obiect dat,
se va verifica lantul de prototipuri (prototype chain)
caracteristici: prototipuri
![Page 105: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/105.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
caracteristici: prototipuri
ObjA
this.initA ( ) ObjB
this.initB ( ) ObjC
this.initC ( )
var test = new objC ( )
test.initA ( );
ObjB.prototype = new ObjA ( );
ObjC.prototype = new ObjB ( );
dupa Subramanyan Murali, “JavaScript Design Patterns”, 2008
![Page 106: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/106.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
function Animal (nume, marime) { // definitie initiala
this.nume = nume;
this.marime = marime;
}
Animal.prototype.oferaNume = function() {
return this.nume;
};
Animal.prototype.oferaMarime = function() {
return this.marime;
};
caracteristici: prototipuri
![Page 107: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/107.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Pentru a cunoaste tipul unui obiect (pe baza constructorului si a ierarhiei de prototipuri)
se foloseste operatorul instanceof
caracteristici: prototipuri
![Page 108: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/108.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
var marimi = [17, 20, 7, 14];
marimi instanceof Array true
marimi instanceof Object true
marimi instanceof String false
var tux = new Animal ("Tux", 17);
tux instanceof Object true
tux instanceof Array false
caracteristici: prototipuri
![Page 109: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/109.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Adaugarea unei metode se realizeaza via prototype
Animal.prototype.oferaNumeMare = function () {
return this.nume.toUpperCase ();
};
tux.oferaNumeMare () "TUX"
caracteristici: extinderea claselor
![Page 110: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/110.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Pot fi extinse si obiectele predefinite:
// adaugam o metoda obiectului String String.prototype.inverseaza = function () {
var inv = '';
for (var iter = this.length - 1; iter >= 0; iter--) { // inversam sirul…
inv += this[iter];
}
return inv;
};
"Web".inverseaza () "beW"
caracteristici: extinderea claselor
![Page 111: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/111.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Cel mai general prototype este cel al lui Object
Una dintre metodele disponibile este toString() care poate fi supra-scrisa (over-ride)
caracteristici: extinderea claselor
![Page 112: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/112.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
var tux = new Animal ("Tux", 17);
tux.toString () [object Object]
Animal.prototype.toString = function () { return '<animal>' + this.oferaNume () + '</animal>'; };
tux.toString () "<animal>Tux</animal>"
caracteristici: extinderea claselor
![Page 113: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/113.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
![Page 114: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/114.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Atentie la pericole!
de exemplu, comportamentul diferit al constructiei for (var proprietate in obiect)
caracteristici: extinderea claselor
![Page 115: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/115.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Deoarece o functie reprezinta un obiect, poate fi:
stocata intr-o variabila
pasata unei alte functii
intoarsa de o functie – fiind argument pentru return
caracteristici: functii de nivel inalt
![Page 116: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/116.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Dorim sa calculam greutatea unui animal, dupa formula greutate = marime * 33
varianta clasica:
var marimi = [17, 20, 7, 14];
var greutati = [ ];
for (var contor = 0; contor < marimi.length; contor++) {
greutati[contor] = marimi[contor] * 33;
}
caracteristici: functii de nivel inalt
![Page 117: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/117.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Varianta imbunatatita – mai generala:
function genereazaTablouGreutati (tablou, calcul) {
var rezultat = [ ];
for (var contor = 0; contor < tablou.length; contor++) {
rezultat[contor] = calcul (tablou[contor]);
}
return rezultat;
}
function calculGreutate (marime) {
return marime * 33;
}
var greutati = genereazaTablouGreutati (marimi, calculGreutate);
referim functia ce va realiza calculul
![Page 118: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/118.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Varianta imbunatatita – mai generala:
function genereazaTablouGreutati (tablou, calcul) {
var rezultat = [ ];
for (var contor = 0; contor < tablou.length; contor++) {
rezultat[contor] = calcul (tablou[contor]);
}
return rezultat;
}
function calculGreutate (marime) {
return marime * 33;
}
var greutati = genereazaTablouGreutati (marimi, calculGreutate);
calcul e variabila de tip functie
fiind functie, se poate apela
![Page 119: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/119.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
![Page 120: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/120.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
JavaScript ofera un singur spatiu de nume, la nivel global
conflicte privind denumirea functiilor/variabilelor specificate de programe diferite,
concepute de mai multi dezvoltatori
caracteristici: incapsulare
![Page 121: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/121.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Nu trebuie afectat spatiul de nume global, pastrându-se codul-sursa la nivel privat
caracteristici: incapsulare
![Page 122: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/122.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Codul poate fi complet încapsulat via functii anonime
care “pastreaza” constructiile la nivel privat
caracteristici: incapsulare
![Page 123: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/123.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Declararea imbricata – ca expresii de tip functie – a functiilor anonime are denumirea closures
https://developer.mozilla.org/en/JavaScript/Guide/Closures
caracteristici: closures
![Page 124: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/124.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
// specificarea unei expresii de tip functie
( function () {
// variabilele & functiile vor fi vizibile doar aici
// variabilele globale pot fi accesate
} ( ) );
caracteristici: closures
![Page 125: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/125.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
var cod = (function () {
var n = 0; // variabila privata function start (x) { // ... poate accesa 'n' // si functia 'faCeva' } function faAia (param) { // ... invizibila din afara }
function faCeva (x, y) { // ... } return { // sunt publice doar // functiile 'start' si 'faCeva' 'start': start, 'faCeva': faCeva } }) (); cod.start (x); // apelam 'start'
![Page 126: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/126.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
var cod = (function () {
var n = 0; // variabila privata function start (x) { // ... poate accesa 'n' // si functia 'faCeva' } function faAia (param) { // ... invizibila din afara }
function faCeva (x, y) { // ... } return { // sunt publice doar // functiile 'start' si 'faCeva' 'start': start, 'faCeva': faCeva } }) (); cod.start (x); // apelam 'start'
via closures, simulam metodele private modularizarea codului (module pattern)
![Page 127: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/127.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
var makeCounter = function () { var contorPrivat = 0; // un contor de valori (initial, zero) function changeBy (val) { // functie privata contorPrivat += val; // ce modifica valoarea contorului } return { // functii publice (expuse) increment: function() { changeBy (1); }, decrement: function() { changeBy (-1); }, value: function() { return contorPrivat; } }; };
console.log (contor1.value ()); /* 0 */
contor1.increment ();
contor1.increment ();
console.log (contor1.value ()); /* 2 */
contor1.decrement ();
console.log (contor1.value ()); /* 1 */
console.log (contor2.value ()); /* 0 */
![Page 128: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/128.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
![Page 129: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/129.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Totul in JavaScript este obiect – chiar si functiile
de retinut!
![Page 130: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/130.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Orice obiect este intotdeauna mutabil (poate fi alterat oricând)
toate proprietatile si metodele sunt disponibile oriunde (public scope)
de retinut!
![Page 131: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/131.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Nu exista vizibilitate la nivel de bloc de cod (block scope),
ci doar la nivel global ori la nivel de functie
de retinut!
![Page 132: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/132.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Functiile ascund orice e definit in interiorul lor
de retinut!
![Page 133: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/133.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Operatorul “.” este echivalent cu de-referentierea:
ob.prop === ob["prop"]
de retinut!
![Page 134: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/134.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Operatorul new creeaza obiecte apartinând clasei specificate de functia constructor
de retinut!
![Page 135: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/135.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Accesorul this este relativ la contextul executiei, nu al declararii
de retinut!
![Page 136: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/136.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Accesorul this este relativ la contextul executiei, nu al declararii
de retinut!
Atentie la dependenta de mediul de executie!
![Page 137: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/137.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Proprietatea prototype are valori modificabile
de retinut!
![Page 138: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/138.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
JavaScript Object Notation
http://json.org/
json
![Page 139: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/139.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
JavaScript Object Notation
format compact pentru interschimb de date intre aplicatii
json
![Page 140: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/140.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
JavaScript Object Notation
datele pot fi specificate in termeni de obiecte & literali
json
![Page 141: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/141.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
JavaScript Object Notation
{
'nume': 'Tux',
'stoc': 33,
'model': [ 'candid', 'furios', 'vesel' ]
}
json
datele pot fi evaluate direct in JavaScript
![Page 142: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/142.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
exemplu concret: raspuns JSON obtinut in urma unei interogari YQL
![Page 143: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/143.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Editare de cod & dezvoltare de aplicatii Web Testare
Documentare a codului Compresie Optimizare
instrumente
![Page 144: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/144.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Pentru desktop: Aptana Studio, JS Development Tools (plug-in Eclipse),
Sublime Text, Visual Studio (Express Edition),…
Disponibile pe Web: Cloud9 IDE, JS Bin, JS Fiddle etc.
unele ofera si partajarea codului-sursa cu alti dezvoltatori
instrumente: editare
![Page 145: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/145.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Verificare statica
instrumente de referinta: JSLint JSHint
instrumente: testare
![Page 146: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/146.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Suport pentru unit testing
exemplificari: Jasmine
JSTest.NET QUnit
Sinon.js Tyrtle
instrumente: testare
![Page 147: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/147.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Standarde de redactare a codului JavaScript
exemple: Crock’s Code Conventions for JavaScript
Google JavaScript Style Guide Idiomatic.js
ghiduri specifice – e.g., jQuery Core Style Guide
instrumente: documentarea codului
![Page 148: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/148.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Software pentru documentarea programelor
JSDoc Toolkit jGrouseDoc
YUIDoc
instrumente: documentarea codului
![Page 149: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/149.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Instrumente privind compresia/minimizarea
Online Javascript Compression Tool YUI Compressor
Scriptalizer
detalii in articolul A. Powell, Understanding Compression and Minification (mai 2012):
www.aaron-powell.com/javascript/understanding-compression-and-minification
instrumente: compresie de cod
![Page 150: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/150.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Transformarea codului JS intr-unul optimizat
exemplu de referinta: Closure Compiler
https://developers.google.com/closure/
instrumente: optimizare javascript
![Page 151: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/151.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Facilitarea dezvoltarii de aplicatii Web la nivel de client similare celor desktop
exemplificari notabile:
Cappuccino – http://cappuccino.org/ SproutCore – http://www.sproutcore.com/
instrumente
![Page 152: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/152.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Alte limbaje pentru dezvoltarea de aplicatii Web
CoffeeScript (Jeremy Ashkenas, 2009) http://coffeescript.org/
TypeScript (Microsoft, 2012) http://www.typescriptlang.org/
limbaje de programare care se compileaza in JavaScript
instrumente
![Page 153: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/153.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Portarea altor aplicatii in JavaScript
Emscripten – compilator LLVM generand cod JS (e.g., programe C/C++, Lua, Python, Ruby
ce se pot compila in JavaScript)
http://emscripten.org/
instrumente
![Page 154: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/154.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
Portarea altor aplicatii in JavaScript
JSIL – compilator care transforma aplicatiile .NET in programe JavaScript ruland independent de browser
http://jsil.org/
instrumente
![Page 155: Limbajul JavaScript: o prezentare generală](https://reader033.vdocuments.pub/reader033/viewer/2022051013/547b2a4cb479599a098b4c10/html5/thumbnails/155.jpg)
Dr.
Sab
in B
ura
ga
ww
w.p
url
.org
/ne
t/b
usa
co
?