+ All Categories
Home > Technology > Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript

Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript

Date post: 13-May-2015
Category:
Upload: sabin-buraga
View: 264 times
Download: 6 times
Share this document with a friend
Description:
Dezvoltarea aplicaţiilor Web la nivel de client — detalii la http://profs.info.uaic.ro/~busaco/teach/courses/cliw/web-film.html
155
Dr. Sabin Buragawww.purl.org/net/busaco programare Web la nivel de client o prezentare general ă a limbajului JavaScript
Transcript
Page 1: Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în limbajul JavaScript

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Dr.

Sab

in B

ura

ga

www.purl.org/net/busaco

episodul viitor: JavaScript în cadrul browser-ului


Recommended