dezvoltarea aplicaţiilor web la nivel de client (cursul #8): programare în limbajul javascript
DESCRIPTION
Dezvoltarea aplicaţiilor Web la nivel de client — detalii la http://profs.info.uaic.ro/~busaco/teach/courses/cliw/web-film.htmlTRANSCRIPT
![Page 1: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/1.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
programare Webla nivel de client
o prezentare generală a limbajului JavaScript
![Page 2: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/2.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
“Un arcaș bun atinge țintachiar înainte de a trage.”
Ch’Ao Pu-Che
![Page 3: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/3.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
JavaScript
un limbaj de programare pentru Web
![Page 4: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/4.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Inventat de Brendan Eich (1995)
denumit inițial LiveScript
![Page 5: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/5.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Implementat în premieră de browser-ulNetscape Navigator
![Page 6: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/6.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Adaptat de Microsoft: JScript (1996)
![Page 7: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/7.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Standardizat în 1997 de ECMAEuropean Computer Manufacturers Association
ECMAScriptECMA-262
www.ecma-international.org
![Page 8: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/8.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Standardizat în 1997 de ECMAEuropean Computer Manufacturers Association
ECMAScript
versiunea standardizată actuală: 5.1 (iunie 2011)versiunea în lucru: 6.0 (în curând)
www.ecma-international.org/publications/standards/Ecma-262.htm
![Page 9: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/9.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Limbaj de tip script (interpretat)
![Page 10: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/10.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Limbaj de tip script (interpretat)
destinat să manipuleze, să automatizezeși să integreze funcționalitățile
oferite de un anumit sistem
![Page 11: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/11.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Limbaj de tip script (interpretat)
nu necesită intrări/ieșiri în mod implicit
![Page 12: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/12.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Adoptă diverse paradigme de programare
imperativă
à la C
![Page 13: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/13.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Adoptă diverse paradigme de programare
funcțională
λ calculfuncții anonime, închideri (closures),…
![Page 14: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/14.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Adoptă diverse paradigme de programare
pseudo-obiectuală
via prototipuri (obiectele moștenesc alte obiecte, nu clase)
![Page 15: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/15.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Adoptă diverse paradigme de programare
dinamică
variabilele își pot schimba tipul pe parcursul rulării programului
![Page 16: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/16.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Cum putem executa programele JavaScript?
![Page 17: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/17.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Mediu de execuție (host-environment)
navigator Web
permite rularea de aplicații Web la nivelul unei platforme(un sistem de operare)
desktop (e.g., Linux, Windows 8)mobil – Android, iOS, Windows Phone, Firefox OS etc.
…
![Page 18: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/18.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Mediu de execuție (host-environment)
navigator Web
“injectarea” de cod JavaScriptîn documentele HTML via elementul <script>
![Page 19: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/19.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Mediu de execuție (host-environment)
navigator Web
“injectarea” de cod JavaScriptîn documentele HTML via elementul <script>
cod extern referit printr-un URL vs. cod inclus direct în pagina Web
![Page 20: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/20.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Mediu de execuție (host-environment)
platformă de dezvoltare a aplicațiilor
exemple:Adobe AIR
Apache Flex
![Page 21: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/21.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Mediu de execuție (host-environment)
software de sine-stătător
Adobe Creative Suite, UltraEdit etc.
![Page 22: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/22.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Mediu de execuție (host-environment)
procesor (engine) independent
exemplificare:Yahoo! Widget Engine
![Page 23: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/23.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Mediu de execuție (host-environment)
componente ale sistemului de operare
Dashboard – Mac OS XSidebar – Windows Vista/7
Windows Store Apps – Windows 8PlayStation
etc.
![Page 24: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/24.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Mediu de execuție (host-environment)
server Web
exemplu tipic: node.js
![Page 25: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/25.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
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 26: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/26.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
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 27: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/27.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Number
reprezentare în dublă precizie
stocare pe 64 biți – standardul IEEE 754
caracteristici: tipuri de date
![Page 28: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/28.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
String
secvențe de caractere Unicode
fiecare caracter ocupă 16 biți (UTF-16)
caracteristici: tipuri de date
![Page 29: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/29.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Boolean
expresii ce se pot evalua ca fiind true/false
caracteristici: tipuri de date
![Page 30: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/30.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Object
FunctionArrayDate
RegExp
și altele
caracteristici: tipuri de date
![Page 31: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/31.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Null
semnifică “nici o valoare”
caracteristici: tipuri de date
![Page 32: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/32.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Undefined
are semnificația “nici o valoare asignată încă”
caracteristici: tipuri de date
![Page 33: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/33.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Nu există valori întregi
caracteristici: tipuri de date
![Page 34: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/34.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Nu există valori întregi
convertirea unui șir în număr: parseInt ()
parseInt ("123") 123parseInt ("11", 2) 3
caracteristici: tipuri de date
indică bazade numerație
![Page 35: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/35.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Operații avansate cu numere se pot realizavia obiectul predefinit Math
caracteristici: tipuri de date
![Page 36: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/36.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Operații avansate cu numere se pot realizavia obiectul predefinit Math
constante predefinite:Math.PI
Math.E
Math.LN10
etc.
caracteristici: tipuri de date
![Page 37: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/37.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Operații avansate cu numere se pot realizavia 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 38: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/38.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
“Valoarea” NaN (“not a number”)
parseInt ("Salut") NaNisNaN (NaN + 3) true
caracteristici: tipuri de date
![Page 39: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/39.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Valori speciale:
Infinity
–Infinity
caracteristici: tipuri de date
![Page 40: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/40.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Un caracter reprezintă un șir de lungime 1
caracteristici: tipuri de date
![Page 41: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/41.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Șirurile sunt obiecte
"Salut".length 5
caracteristici: tipuri de date
![Page 42: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/42.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Metode utile pentru procesarea șirurilor de caractere:
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 43: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/43.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Valorile 0, "", NaN, null, undefined
sunt interpretate ca fiind false
!!234 true
caracteristici: tipuri de date
![Page 44: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/44.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Variabilele se declară cu var
var marime;
var numeAnimal = "Tux";
variabilele declarate fără valori asignate, se consideră undefined
caracteristici: variabile
![Page 45: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/45.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Dacă nu se folosește var,atunci variabila este considerată globală
de evitat așa ceva!
caracteristici: variabile
![Page 46: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/46.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Valorile sunt “legate” tardiv la variabile(late binding)
caracteristici: variabile
![Page 47: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/47.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Există posibilitatea mărginiriidomeniului 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 48: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/48.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Pentru numere: + – * / %
De asignare: += –= *= /= %=
Incrementare & decrementare: ++ – –
Concatenare de șiruri: "Java" + "Script" "JavaScript"
caracteristici: operatori
![Page 49: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/49.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Conversia tipurilor se face “din zbor” (dinamic)
"3" + 4 + 5 3453 + 4 + "5" 75
adăugând un șir vid la o expresie,o convertim pe aceasta la string
caracteristici: operatori
![Page 50: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/50.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Comparații: < > <= >= (numere și șiruri)
egalitatea valorilor se testează cu == și !=
1 == true true
caracteristici: operatori
![Page 51: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/51.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Comparații: < > <= >= (numere și șiruri)
egalitatea valorilor se testează cu == și !=
1 == true true
a se folosi: 1 === true false
caracteristici: operatori
inhibă conversiatipurilor de date
![Page 52: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/52.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Aflarea tipului unei expresii: operatorul typeoftypeof "Tux" string
caracteristici: operatori
![Page 53: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/53.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Operatorii logici && și ||
var nume = unNume || "Implicit";
caracteristici: operatori
![Page 54: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/54.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Operatorul ternar de test ? :
var prezență = (studenți > 33) ? "Prea mulți" : "Cam puțini…";
caracteristici: operatori
![Page 55: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/55.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Testare: if … else, switchpentru switch, sunt permise expresii la fiecare case
(testarea se realizează cu operatorul ===)
switch (2 + 3) { /* sunt permise expresii */
case 4 + 1 : egalitate ();
break;
default : absurd (); // nu se apelează niciodată
}
caracteristici: control
![Page 56: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/56.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
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 57: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/57.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Excepții: try … catch … finally
try { // Linii "periculoase" ce pot cauza excepții
} catch (eroare) {// Linii rulate la apariția unei/unor excepții
} finally {// Linii care se vor executa la final
}
caracteristici: control
![Page 58: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/58.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Excepții: try … catch … finally
try { // Linii "periculoase" ce pot cauza excepții
} catch (eroare) {// Linii rulate la apariția unei/unor excepții
} finally {// Linii care se vor executa la final
}
emiterea unei excepții: throw
throw new Error ("O eroare de-a noastră...");
caracteristici: control
![Page 59: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/59.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Gestionarea erorilor
ErrorEvalError
RangeErrorReferenceError
SyntaxErrorTypeErrorURIError
caracteristici: control
![Page 60: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/60.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Perechi nume—valoare
caracteristici: obiecte
![Page 61: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/61.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Perechi nume—valoare
tabele de dispersie (hash) în C/C++tablouri asociative în Perl, PHP sau Ruby
HashMaps în Java
“everything except primitive values is an object”
caracteristici: obiecte
![Page 62: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/62.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Perechi nume—valoare
numele este desemnat de un șir de caractere(i.e., expresie de tip String)
valoarea poate fi de orice tip, inclusiv null sau undefined
caracteristici: obiecte
![Page 63: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/63.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Obiect colecție de proprietăți,având mai multe atribute
caracteristici: obiecte
![Page 64: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/64.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Obiect colecție de proprietăți,având mai multe atribute
proprietățile pot conține alte obiecte,valori primitive sau metode
caracteristici: obiecte
![Page 65: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/65.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Obiecte predefinite:Global
Object
Function
Array
String
Boolean
Number
Math
Date
caracteristici: obiecte
![Page 66: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/66.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Create prin intermediul operatorului new:
var ob = new Object();
var ob = { }; // echivalent cu linia anterioară
caracteristici: obiecte
se preferă această sintaxă
![Page 67: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/67.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Accesarea proprietăților – operatorul .
ob.nume = "Tux";
var nume = ob.nume;
caracteristici: obiecte
![Page 68: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/68.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Accesarea proprietăților – operatorul .
ob.nume = "Tux";
var nume = ob.nume;
echivalent cu:
ob["nume"] = "Tux";
var nume = ob["nume"];
caracteristici: obiecte
![Page 69: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/69.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Declarare + asignare:
var pinguin = {
nume: "Tux",
proprietati: {
culoare: "verde",
marime: 17
}
}
caracteristici: obiecte
![Page 70: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/70.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Accesare:
pinguin.proprietati.marime 17
pinguin["proprietati"]["culoare"] verde
caracteristici: obiecte
![Page 71: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/71.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
var facultyContactInfo = {
// numele proprietăților sunt încadrate de ghilimele
"official-phone" : '+40232201090',
city : 'Iasi', // dacă numele e identificator valid, ghilimelele pot fi omise
'street' : 'Berthelot Street',
'number' : 16, // pot fi folosite orice tipuri de date primitive
"class" : "new", // cuvintele rezervate se plasează între ghilimele
coord : { // obiectele pot conține alte obiecte (nested objects)
'geo' : { 'x': 47.176591, 'y': 27.575930 }
},
age : Math.floor ("21.7") // pot fi invocate metode de calcul a valorilor
};
console.log (facultyContactInfo.coord["geo"].y); // obținem 27.57593
adaptare după Sergiu Dumitriu (2012)
![Page 72: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/72.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Iterarea proprietăților – considerate chei:
var pinguin = { 'nume': 'Tux', 'marime': 17 };
for (var proprietate in pinguin) {
afiseaza (proprietate + ' = ' + pinguin[proprietate]);
}
caracteristici: obiecte
![Page 73: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/73.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Eliminarea proprietăților se realizează cu delete
var pinguin = { 'nume': 'Tux', 'marime': 17 };
pinguin.nume = undefined; // nu șterge proprietatea
delete pinguin.marime; // eliminare efectivă
for (var prop in pinguin) {
console.log (prop + "=" + pinguin[prop]);
}
// va apărea doar "nume=undefined"
caracteristici: obiecte
![Page 74: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/74.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Tipuri speciale de obiecte
proprietățile (cheile) sunt numere,nu șiruri de caractere
caracteristici: tablouri
![Page 75: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/75.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Se poate utiliza sintaxa privitoare la obiecte:
var animale = new Array ();animale[0] = "pinguin";animale[1] = "omida";animale[2] = "pterodactil";
animale.length 3
caracteristici: tablouri
![Page 76: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/76.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Se poate utiliza sintaxa privitoare la obiecte:
var animale = new Array ();animale[0] = "pinguin";animale[1] = "omida";animale[2] = "pterodactil";
animale.length 3
notație alternativă – preferată:
var animale = ["pinguin", "omida", "pterodactil"];
caracteristici: tablouri
![Page 77: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/77.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Tablourile pot avea “găuri” (sparse arrays):
var animale = ["pinguin", "omida", "pterodactil"];
animale[33] = "om";
animale.length 34typeof animale[13] undefined
caracteristici: tablouri
![Page 78: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/78.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Tablourile pot avea “găuri” (sparse arrays):
var animale = ["pinguin", "omida", "pterodactil"];
animale[33] = "om";
animale.length 34typeof animale[13] undefined
pentru a adăuga elemente putem recurge la:animale[animale.length] = altAnimal;
caracteristici: tablouri
![Page 79: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/79.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
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 după John Kugelman (2009)
![Page 80: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/80.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
rezultatul obținut în urma rulării programului JavaScript via JS Bin
![Page 81: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/81.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Interări:
for (var it = 0; it < animale.length; it++) {
// de prelucrat animale[it]
}
caracteristici: tablouri
![Page 82: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/82.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Interări:
for (var it = 0; it < animale.length; it++) {
// de prelucrat animale[it]
}
// variantă mai bună
for (var it = 0, lung = animale.length; it < lung; it++) {
// de prelucrat animale[it]
}
caracteristici: tablouri
de ce?
![Page 83: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/83.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Elementele pot aparțineunor tipuri de date eterogene
var animale = [33, "vierme", false, "gaga"];
caracteristici: tablouri
![Page 84: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/84.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
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 85: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/85.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Definite via function
function transformaPixeliInPuncte (px) {var puncte = px * 300;return puncte;
}
caracteristici: funcții
![Page 86: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/86.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Dacă nu este întors nimic în mod explicit, valoarea de retur se consideră undefined
caracteristici: funcții
![Page 87: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/87.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Parametrii de intrare pot lipsi, fiind considerați undefined
caracteristici: funcții
![Page 88: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/88.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Pot fi transmise mai multe argumente,cele în surplus fiind ignorate
transformaPixeliInPuncte (10, 7) 3000
caracteristici: funcții
![Page 89: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/89.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Argumentele primite de o funcție se acceseazăvia tabloul arguments:
function aduna () {
var suma = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
suma += arguments[i];
}
return suma;
}
caracteristici: funcții
![Page 90: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/90.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Funcțiile sunt tot obiecte
astfel, pot fi specificate funcții anonime
caracteristici: funcții
expresiilambda
![Page 91: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/91.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Funcțiile sunt tot obiecte
astfel, pot fi specificate funcții anonime
în acest sens, JavaScript este un limbaj funcțional
caracteristici: funcții
expresiilambda
![Page 92: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/92.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
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: funcții
![Page 93: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/93.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
![Page 94: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/94.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
precizați ce efect vor avea liniile de cod următoare:console.log ( typeof (media) );
console.log ( media() );
![Page 95: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/95.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
variabila media este de tip function
apelul media() întoarce valoarea NaN
![Page 96: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/96.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
/* determină numărul 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, numărăm caracterele fiecărui nod copil
// al arborelui DOM cu rădăcina ‘element’
for (var it = 0, copil; copil = element.childNodes[it]; it++) {
contor += numaraCaractereDinNoduriText (copil);
}
return contor;
}
vezi celediscutate la DOM
funcții recursive în JavaScript
![Page 97: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/97.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco// varianta folosind funcții 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);
furnizează care-i funcția apelantă
![Page 98: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/98.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Exemplificare:dorim să procesam – via funcții –
caracteristici ale unor animale
caracteristici: de la funcții la clase
![Page 99: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/99.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
function creeazaAnimal (nume, marime) {return { nume: nume, marime: marime }
}function oferaNume (animal) {
return animal.nume;}function oferaMarime (animal) {
return animal.marime;}
caracteristici: de la funcții la clase
![Page 100: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/100.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
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 funcții la clase
![Page 101: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/101.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
O “clasă” referitoare la animale:
function creeazaAnimal (nume, marime) {return {
nume: nume, // date-membremarime: marime,oferaNume: function () { // metodă de furnizare a numelui
return animal.nume;},oferaMarime: function () { // o altă metodăreturn animal.marime;
}
}}
caracteristici: de la funcții la clase
![Page 102: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/102.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Dorim să apelăm metodele definite:
var tux = creeazaAnimal ("Tux", 17);
tux.oferaMarime ()
ReferenceError: animal is not defined
caracteristici: de la funcții la clase
![Page 103: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/103.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Obiectul curent (“this”) este setat ca fiind obiectul global
de exemplu, în browser, reprezintă fereastra curentăîn care este redat documentul: this window
caracteristici: de la funcții la clase
![Page 104: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/104.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
function Animal (nume, marime) {
this.nume = nume; // date-membre
this.marime = marime;
this.oferaNume = function () { // metodă
return this.nume;
};
this.oferaMarime = function () { // metodă
return this.marime;
};
}
caracteristici: de la funcții la clase
creational pattern
![Page 105: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/105.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
function Animal (nume, marime) {
this.nume = nume; // date-membre
this.marime = marime;
this.oferaNume = function () { // metodă
return this.nume;
};
this.oferaMarime = function () { // metodă
return this.marime;
};
}
caracteristici: de la funcții la clase
clase – utilizareaconstructorilor
var tux = new Animal ("Tux", 17); // instanțierea unui obiect
![Page 106: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/106.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Operatorul new creează un nou obiect vid șiapelează funcția specificată cu this setat pe acest obiect
aceste funcții se numesc constructori,trebuie apelate via new
și, prin convenție, au numele scris cu literă mare
caracteristici: funcții & obiecte
![Page 107: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/107.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Metodele pot fi declarate și în exteriorul constructorului
function oferaNumeAnimal () {
return this.nume;
}
function Animal (nume, marime) {
this.nume = nume;
this.marime = marime;
this.oferaNume = oferaNumeAnimal;
}
caracteristici: funcții & obiecte
![Page 108: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/108.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Orice obiect deține trei tipuri de proprietăți:
named data propertyo proprietate având asignată o valoare
named accessor propertyde tip setter/getter pentru a stabili/accesa o valoare
internal propertyfolosită exclusiv de procesorul ECMAScript (JavaScript)
caracteristici: proprietăți
![Page 109: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/109.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Fiecare proprietate are asociate atributele:
[[Value]] – desemnează valoarea curentă a proprietății[[Writable]] – indică dacă o proprietate
poate să-și modifice valoarea[[Get]] și [[Set]] – funcții opționale pentru a oferi/stabili
valoarea unei proprietăți de tip accessor[[Enumerable]] – specifică dacă numele proprietății
va fi disponibil într-o buclă for-in
[[Configurable]] – indică dacă proprietatea poate fi ștearsă ori redefinită
caracteristici: proprietăți
![Page 110: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/110.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
proprietăți interne importante (manipulate de procesorul ECMAScript, dar inaccesibile la nivel de program)
[[Prototype]] definește ierarhiilor de obiecte
[[Get]] [[Put]] [[CanPut]] pentru accesarea valorilor
[[HasProperty]]
[[DefineOwnProperty]]
[[GetProperty]]
[[GetOwnProperty]]
[[Delete]]
manipularea proprietăților
[[Extensible]] indică obiectele ce pot fi extinse
[[Construct]]
[[Call]]asociate obiectelor executabile
(funcții)
[[Code]]
[[Scope]]desemnează codul & contextul
unei obiect de tip funcție
![Page 111: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/111.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
// crearea unei proprietăți simple stocând date
// (writable, enumerable, configurabile)
obiect.numeProprietate = 33;
// crearea via API-ul intern a unei proprietăți stocând date
Object.defineProperty (obiect, "numeProprietate", {
value: 33, writable: true, enumerable: true, configurable: true }
)
caracteristici: proprietăți
![Page 112: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/112.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
proprietățile interne ale obiectelor definitehttp://www.objectplayground.com/
![Page 113: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/113.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Deoarece orice obiect deține în mod implicit proprietatea prototype,
structura unei clase poate fi extinsă ulterior
caracteristici: prototipuri
![Page 114: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/114.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Deoarece orice obiect deține în mod implicit proprietatea prototype,
structura unei clase poate fi extinsă ulterior
un prototip e o proprietate oferind o legătură ascunsă către obiectul de care aparține
caracteristici: prototipuri
![Page 115: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/115.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Dacă se încearcă accesarea unui element inexistentîn cadrul unui obiect dat,
se va verifica lanțul de prototipuri (prototype chain)
caracteristici: prototipuri
![Page 116: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/116.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
function Animal (nume, marime) { // definiție inițială
this.nume = nume;
this.marime = marime;
}
// pe baza protipurilor, definim noi metode
Animal.prototype.oferaNume = function () {
return this.nume;
};
Animal.prototype.oferaMarime = function () {
return this.marime;
};
// instanțiem un obiect de tip Animal
var tux = new Animal ("Tux", 17);
![Page 117: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/117.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
![Page 118: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/118.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Pentru a cunoaște tipul unui obiect(pe baza constructorului și a ierarhiei de prototipuri)
se folosește operatorul instanceof
caracteristici: prototipuri
![Page 119: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/119.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
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 120: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/120.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Adăugarea unei metode se realizează via prototype
Animal.prototype.oferaNumeMare = function () {
return this.nume.toUpperCase ();
};
tux.oferaNumeMare () "TUX"
caracteristici: extinderea claselor
![Page 121: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/121.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Pot fi extinse și obiectele predefinite:
// adăugăm o metodă obiectului String
String.prototype.inverseaza = function () {
var inv = '';
for (var iter = this.length - 1; iter >= 0; iter--) { // inversăm șirul…
inv += this[iter];
}
return inv;
};
"Web".inverseaza () "beW"
caracteristici: extinderea claselor
![Page 122: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/122.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Cel mai general prototype este cel al lui Object
Una dintre metodele disponibile este toString()
care poate fi suprascrisă (over-ride)
caracteristici: extinderea claselor
![Page 123: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/123.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
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 124: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/124.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
![Page 125: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/125.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Atenție la pericole!
de exemplu, comportamentul diferit al construcțieifor (var proprietate in obiect)
caracteristici: extinderea claselor
![Page 126: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/126.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Șablon general:
ClasaDeBaza = function () { /* … */ };
SubClasa = function () { /* … */ };
SubClasa.prototype = new ClasaDeBaza ();
caracteristici: extinderea claselor
![Page 127: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/127.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Deoarece o funcție reprezintă un obiect, poate fi:
stocată ca valoare (asociată unei variabile)
pasată ca argument al unei alte funcții
întoarsă de o funcție – fiind argument pentru return
caracteristici: funcții de nivel înalt
![Page 128: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/128.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Dorim să calculăm greutatea unui animal,după formula greutate = marime * 33
varianta clasică:
var marimi = [17, 20, 7, 14];
var greutati = [ ];
for (var contor = 0; contor < marimi.length; contor++) {
greutati[contor] = marimi[contor] * 33;
}
caracteristici: funcții de nivel înalt
![Page 129: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/129.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Varianta îmbunătățită – mai generală:
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 funcțiace va realiza calculul
![Page 130: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/130.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Varianta îmbunătățită – mai generală:
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 variabilăde tip funcție
fiind funcție, se poate apela
![Page 131: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/131.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
a se consulta șiexemplele din arhivaasociată acestui curs
![Page 132: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/132.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
JavaScript oferă un singur spațiu de nume, la nivel global
conflicte privind denumirea funcțiilor/variabilelorspecificate de programe diferite,
concepute de mai multi dezvoltatori
caracteristici: încapsulare
![Page 133: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/133.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Nu trebuie afectat spațiul de nume global,păstrându-se codul-sursă la nivel privat
caracteristici: încapsulare
![Page 134: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/134.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Codul poate fi complet încapsulatvia funcții anonime
care “păstrează” construcțiile la nivel privat
caracteristici: încapsulare
![Page 135: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/135.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Declararea imbricată – ca expresii de tip funcție –a funcțiilor anonime are denumirea closures
https://developer.mozilla.org/en/JavaScript/Guide/Closures
caracteristici: closures
închideri
![Page 136: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/136.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
// specificarea unei expresii de tip funcție
( function () {
// variabilele & funcțiile vor fi vizibile doar aici
// variabilele globale pot fi accesate
} ( ) );
caracteristici: closures
![Page 137: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/137.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
var cod = (function () {var n = 0; // variabilă privatăfunction start (x) {
// ... poate accesa 'n' // și funcția 'faCeva'
}function faAia (param) {// ... invizibilă din afară
}
function faCeva (x, y) {// ...
}return { // sunt publice doar// funcțiile 'start' și 'faCeva''start': start, 'faCeva': faCeva
}}) ();
cod.start (x); // apelăm 'start'
![Page 138: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/138.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
var cod = (function () {var n = 0; // variabilă privatăfunction start (x) {
// ... poate accesa 'n' // și funcția 'faCeva'
}function faAia (param) {// ... invizibilă din afară
}
function faCeva (x, y) {// ...
}return { // sunt publice doar// funcțiile 'start' și 'faCeva''start': start, 'faCeva': faCeva
}}) ();
cod.start (x); // apelăm 'start'
via closures, simulăm metodele privatemodularizarea codului (module pattern)
![Page 139: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/139.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
var makeCounter = function () {var contorPrivat = 0; // un contor de valori (inițial, zero)function changeBy (val) { // funcție privată
contorPrivat += val; // ce modifică valoarea contorului}return { // funcții 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 140: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/140.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
![Page 141: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/141.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Totul în JavaScript este obiect – chiar și funcțiile
de reținut!
![Page 142: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/142.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Orice obiect este întotdeauna mutabil(poate fi alterat oricând)
proprietățile și metodele sunt disponibileoriunde în program (public scope)
de reținut!
![Page 143: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/143.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Nu există vizibilitate la nivel de bloc de cod(block scope),
ci doar la nivel global ori la nivel de funcție
de reținut!
![Page 144: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/144.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Funcțiile ascund orice e definit în interiorul lor
de reținut!
![Page 145: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/145.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Operatorul “.” este echivalentcu de-referențierea:
ob.prop === ob["prop"]
de reținut!
![Page 146: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/146.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Operatorul new creează obiecte aparținând„clasei” specificate de funcția constructor
de reținut!
![Page 147: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/147.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Accesorul this este relativ la contextul execuției, nu al declarării
de reținut!
![Page 148: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/148.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Accesorul this este relativ la contextul execuției, nu al declarării
de reținut!
Atenție la dependența de mediul de execuție!
![Page 149: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/149.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
Proprietatea prototype are valori modificabile
de reținut!
![Page 150: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/150.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
JavaScript Object Notation
http://json.org/
json
![Page 151: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/151.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
JavaScript Object Notation
format compact pentru interschimb de dateîntre aplicații
biblioteci de procesare & alte resurse de interes:http://jsonauts.github.io/
json
![Page 152: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/152.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
JavaScript Object Notation
datele pot fi specificateîn termeni de obiecte și literali
json
![Page 153: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/153.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
JavaScript Object Notation
{
'nume': 'Tux',
'stoc': 33,
'model': [ 'candid', 'furios', 'vesel' ]
}
json
datele pot fi evaluate direct în JavaScript
![Page 154: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/154.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
răspuns JSON obținut în urma unei interogări YQL (Yahoo! Query Language)
http://developer.yahoo.com/yql/
![Page 155: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5552c0c4b4c90581158b4749/html5/thumbnails/155.jpg)
Dr.
Sab
in B
ura
ga
www.purl.org/net/busaco
episodul viitor: JavaScript în cadrul browser-ului