web05dezvoltareaaplicatiilorweb javascript nodejs

Upload: alexspiridon

Post on 07-Jul-2018

231 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    1/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a

         c     o        /

    Tehnologii Web

    programare Web

    ⍟JavaScript la nivel de server – Node.js(aspect e esențiale)

    avansat 

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    2/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i

         n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a

         c     o        /

    „Cine a văzut vreodat ă o bijuterie frumos cizelat ă

    de bijutier cu ajutorul ciocanului?”

    Jan Amos Comenius

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    3/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i

         n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a

         c     o        /

    Inventat de Brendan Eich (1995)

    denumit iniț ial Mocha, apoi LiveScript 

    Oferit în premieră de browser -ul Netscape Navigator

    Adaptat de Microsoft: JScript (1996)

    Standardizat ca ECMAScript : ECMA-262 (1997)

    www.w3.org/community/webed/wiki/A_Short_History_of_JavaScript

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    4/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i

         n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a

         c     o        /

    ECMAScript 

    versiunea standardizat ă în vigoare: 5.1 (2011)www.ecma-international.org/publications/standards/Ecma-262.htm

    versiunea cea mai recentă: 6.0 – ES6 (ECMAScript 2015)git.io/es6features

    referința de bază: https://developer.mozilla.org/JavaScript

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    5/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i

         n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a

         c     o        /

    Limbaj de tip script (interpretat)

    destinat să manipuleze, să automatizeze

    și să integreze f uncționalitățile

    oferite de un anumit sistem

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    6/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i

         n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a

         c     o        /

    Limbaj de tip script (interpretat)

    nu necesit ă intrări/ieșiri în mod implicit 

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    7/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i

         n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a

         c     o        /

    Adoptă diverse paradigme de programare

    imperativă

    à la C

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    8/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i

         n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a

         c     o        /

    Adoptă diverse paradigme de programare

    funcțională

    λ calculfuncții anonime, închideri (closures),…

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    9/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i

         n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a

         c     o        /

    Adoptă diverse paradigme de programare

    pseudo-obiectuală

    via prototipuri(obiectele moștenesc alte obiecte, nu clase)

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    10/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i

         n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Adoptă diverse paradigme de programare

    dinamică

    variabilele își pot schimba tipulpe parcursul rulării programului

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    11/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Cum putem executa programele JavaScript?

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    12/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Mediu de execuț ie (host-environment )

    navigator Web

    permite rularea de aplicaț ii Web la nivelul unei platforme

    (un sistem de operare)

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    13/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Mediu de execuț ie (host-environment )

    navigator Web

    permite rularea de aplicaț ii Web la nivelul unei platforme

    (un sistem de operare)

    inclusiv pe dispozitive mobile (Android, iOS,

    Fire OS (Kindle Fire), Windows Phone,…),

    console de jocuri, smart TV și altele

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    14/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Mediu de execuț ie (host-environment )

    navigator Web

    „injectarea” de cod JavaScript 

     în documentele HTML via elementul

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    15/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Mediu de execuț ie (host-environment )

    navigator Web

    „injectarea” de cod JavaScript 

     în documentele HTML via elementul

    cod extern referit printr-un URL

    vs. cod inclus direct în pagina Web

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    16/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Mediu de execuț ie (host-environment )

    independent de navigatorul Web

    platforme de dezvoltare de aplicații distribuite: Node.js

    servere de baze de date – e.g., Apache CouchDBcomponente ale sistemului de operare

    aplicații de sine-stătătoare – e.g., Adobe Creative Suite

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    17/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Cuvinte rezervate:

    break else new var case finally return void catchfor switch while continue function this with default

    if throw delete in try do instanceof typeof 

    caracteristici: sintaxa

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    18/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Alte cuvinte rezervate:

    abstract enum int short boolean export interfacestatic byte extends long super char final native

    synchronized class float package throws const

    goto private transient debugger implementsprotected volatile double import public

    caracteristici: sintaxa

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    19/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Number

    reprezentare în dublă precizie

    stocare pe 64 biț i – standardul IEEE 754

    caracteristici: tipuri de date

    developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Number 

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    20/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    String

    secvenț e de caractere Unicode

    fiecare caracter ocupă 16 biț i (UTF-16)

    caracteristici: tipuri de date

    developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    21/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Boolean

    expresii ce se pot evalua ca fiind true/ false

    caracteristici: tipuri de date

    developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Boolean

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    22/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Object 

    aproape totul e considerat ca fiind obiect,

    inclusiv funcțiile

    caracteristici: tipuri de date

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    23/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Null

    semnifică „nicio valoare”

    caracteristici: tipuri de date

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    24/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Undefined

    are semnificaț ia „nicio valoare asignat ă încă”

    caracteristici: tipuri de date

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    25/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Nu exist ă valori întregi

    caracteristici: tipuri de date

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    26/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Nu exist ă valori întregi

    convertirea unui șir în număr: parseInt ()

    parseInt ("123") 123

    parseInt ("11", 2) 3

    caracteristici: tipuri de date

    indică baza

    de numeraț ie

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    27/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    „Valoarea” NaN (“not a number ”)

    parseInt ("Salut")   NaN

    isNaN (NaN + 3) true

    valori speciale:

    Infinity

     –Infinity

    caracteristici: tipuri de date

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    28/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Șirurile sunt obiecte

    "Salut".length   5

    un caracter reprezint ă un șir de lungime 1

    caracteristici: tipuri de date

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    29/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Valorile 0, "", NaN, null, undefined

    sunt interpretate ca fiind false

    !!234   true

    caracteristici: tipuri de date

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    30/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Variabilele se declară cu var 

    var marime;var numeAnimal = "Tux";

    variabilele declarate f ără valori asignate,

    se consideră undefined

    caracteristici: variabile

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    31/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Dacă nu se folosește var ,

    atunci variabila este considerat ă globală

    de evitat așa ceva!

    caracteristici: variabile

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    32/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Similari celor din C:

    pentru numere: + – * / %testare: == === != !== ?:

    asignare: += –= *= /= %=

    incrementare și decrementare: ++ – –logici: ! && ||

    concatenare de șiruri: "Java" + "Script"   "JavaScript"

    caracteristici: operatori

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    33/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Conversia tipurilor se face „din zbor” (dinamic)

    "3" + 4 + 5   345

    3 + 4 + "5" 75

    adăugând un șir vid la o expresie,o convertim pe aceasta la string

    caracteristici: operatori

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    34/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Egalitatea valorilor se testează cu == și !=

    1 == true 

    truea se folosi: 1 === true false

    caracteristici: operatori

    inhibă conversia

    tipurilor de date

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    35/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Aflarea tipului unei expresii: operatorul typeof typeof "Tux" string

    caracteristici: operatori

    operand rezultat  undefined 'undefined'

    null 'object'

    de tip Boolean 'boolean'

    de tip Number  'number'

    de tip String 'string'

    Function 'function'

    orice alte valori 'object'

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    36/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    37/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Ciclare: while, do … while, for 

    do {var nume = preiaNume ();

    } while (nume != "");

    for (var contor = 0; contor < 33; contor ++) {// de 33 de ori…

    }

    caracteristici: control

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    38/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Excepț ii: try … catch … finallytry {

    // 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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    39/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .

           i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Excepț ii: try … catch … finallytry {

    // 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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    40/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    41/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    42/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Obiect   colecț ie de propriet ăț i,

    având mai multe atribute

    caracteristici: obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    43/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Obiect   colecț ie de propriet ăț i,

    având mai multe atribute

    propriet ăț ile pot conț ine alte obiecte,

    valori primitive sau metode

    caracteristici: obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    44/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Obiecte predefinite:

    Global Object

    Function Array

    String RegExp

    Boolean Number  Math Date

    caracteristici: obiecte

    de studiat developer.mozilla.org/JavaScript/Reference/Global_Objects

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    45/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Obiecte fundamentale vizând gestionarea erorilor

    Error EvalError 

    RangeError 

    ReferenceError 

    SyntaxError TypeError 

    URIError 

    caracteristici: obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    46/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Create prin intermediul operatorului new:

    var ob = new Object();

    var ob = { }; // echivalent cu linia anterioar ă

    caracteristici: obiecte

    se preferă aceast ă sintaxă

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    47/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Accesarea propriet ăț ilor – operatorul .

    ob.nume = "Tux";var nume = ob.nume;

    caracteristici: obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    48/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Accesarea propriet ăț ilor – operatorul .

    ob.nume = "Tux";var nume = ob.nume;

    echivalent cu:ob["nume"] = "Tux";

    var nume = ob["nume"];

    caracteristici: obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    49/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Declarare + asignare:

    var pinguin = {nume: "Tux",

    proprietati: {

    culoare: "verde",

    marime: 17}

    }

    caracteristici: obiecte

    accesare:pinguin.proprietati.marime 17

    pinguin["proprietati"]["culoare"]

    verde

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    50/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Iterarea propriet ăț ilor – considerate chei:

    var pinguin = { 'nume': 'Tux', 'marime': 17, 'oferta': true };

    for (var proprietate in pinguin) {

    console.log (proprietate + ' = ' + pinguin[proprietate]);

    }

    caracteristici: obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    51/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Tipuri speciale de obiecte

    propriet ăț ile (cheile) sunt numere,nu șiruri de caractere

    caracteristici: tablouri

    developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Array

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    52/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    53/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Elementele pot aparț ine

    unor tipuri de date eterogene

    var animale = [ 33, "vierme", false, "gaga" ];

    caracteristici: tablouri

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    54/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Tablourile pot avea „găuri” (sparse arrays):

    var animale = [ "pinguin", "omida", "pterodactil" ];animale[33] = "om";

    animale.length   34

    typeof animale[13] undefined

    caracteristici: tablouri

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    55/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    Tablourile pot avea „găuri” (sparse arrays):

    var animale = [ "pinguin", "omida", "pterodactil" ];animale[33] = "om";

    animale.length   34

    typeof animale[13] undefined

    pentru a adăuga elemente putem recurge la:

    animale[animale.length] = altAnimal;

    caracteristici: tablouri

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    56/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s

         a     c     o        /

    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)

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    57/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    rezultatul obț inut în urma rulării programului JavaScriptvia aplicația JS Bin

    http://jsbin.com/

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    58/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Definite via function

    function transformaPixeliInPuncte (px) {var puncte = px * 300;return puncte;

    }

    caracteristici: funcții

    developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Function

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    59/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Dacă nu este întors nimic în mod explicit,

    valoarea de retur se consideră undefined

    caracteristici: funcții

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    60/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Parametrii de intrare pot lipsi,

    fiind consideraț i undefined

    Pot fi transmise mai multe argumente,

    cele în surplus fiind ignorate

    transformaPixeliInPuncte (10, 7) 3000

    caracteristici: funcții

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    61/190

       D   r .   S   a    b    i

       n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Funcț iile sunt tot obiecte

    astfel, pot fi specificate funcț ii anonime

     în acest sens, JavaScript este un limbaj funcț ional

    caracteristici: funcții

    expresii

    lambda

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    62/190

       D   r .   S   a    b    i

       n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    63/190

       D   r .   S   a    b    i

       n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    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

    variabilele declarate

     în funcție nu vor fi

    accesibile din exterior,

    fiind „închise”

    funcție closure

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    64/190

       D   r .   S   a    b    i

       n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    console.log ( media (9, 10, 7, 8, 7) ) 8.2

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    65/190

       D   r .   S   a    b    i

       n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    precizaț i ce efect vor avea liniile de cod următoare:

    console.log ( typeof (media) );

    console.log ( media() );

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    66/190

       D   r .   S   a    b    i

       n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    variabila media este de tip function

    apelul media() întoarce valoarea NaN

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    67/190

       D   r .   S   a    b    i

       n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    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: obiecte

    creational pattern

    pseudo-clase

    (utilizareaconstructorilor)

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    68/190

       D   r .   S   a    b    i

       n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Operatorul new creează un nou obiect vid și

    apelează 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: obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    69/190

       D   r .   S   a    b    i

       n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    Față de alte limbaje de programare,

    obiectul curent – referit cu this –este setat ca fiind obiectul global

    de exemplu, în browser , reprezint ă fereastra curent ă în care este redat documentul: this   window

    caracteristici: obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    70/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    caracteristici: de la funcții la clase

    trasarea pas-cu-pas a execuției programului, cu inspectarea valorilor

    variabilelor, via www.pythontutor.com/visualize.html#py=js

     // instanțierea unui obiectvar tux = new Animal ("Tux", 17);console.log (tux.oferaNume ());var  jox = tux;console.log ( jox.oferaNume ());

     // alt obiect

    var pax = new Animal ("Pax", 15);pax.marime = 21;console.log (pax.oferaMarime ());

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    71/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u     s     a     c     o        /

    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; // referă funcția de mai sus

    }

    caracteristici: obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    72/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Orice obiect deține trei tipuri de proprietăți:

    named data property o proprietate având asignată o valoare

    named accessor property de tip setter / getter pentru a stabili/accesa o valoare

    internal property folosită exclusiv de procesorul ECMAScript (JavaScript)

    caracteristici: proprietăți

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    73/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    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

    [[Prototype]] definește ierarhiilor de obiecte

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    74/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    proprietăți interne importante (folosite de procesorul

    ECMAScript, dar inaccesibile la nivel de program)

    [[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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    75/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    // 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 dateObject.defineProperty (obiect, "numeProprietate", {

    value: 33, writable: true, enumerable: true, configurable: true })

    caracteristici: proprietăți

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    76/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    proprietățile interne ale obiectelor definite

    http://www.objectplayground.com/

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    77/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Deoarece orice obiect deține în mod implicit

    proprietatea prototype,

    structura unei „clase” poate fi extinsă ulterior

    caracteristici: prototipuri

    developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Object/prototype

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    78/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    79/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Dacă se încearcă accesarea unui element inexistent 

     în cadrul unui obiect dat,

    se va verifica lanț ul de prototipuri ( prototype chain)

    caracteristici: prototipuri

    function Animal (nume, marime) { // definiție inițialăthi

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    80/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    this.nume = nume;this.marime = marime;

    }

    // pe baza protipurilor, definim noi metode// disponibile pentru toate obiectele din clasă

     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);

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    81/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    82/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Pentru a cunoaște tipul unui obiect 

    (pe baza constructorului și a ierarhiei de prototipuri)

    se folosește operatorul instanceof 

    caracteristici: prototipuri

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    83/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    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

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    84/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Adăugarea unei metode se realizează via prototype

     Animal.prototype.oferaNumeMare = function () {

    return this.nume.toUpperCase ();

    };

    tux.oferaNumeMare () "TUX"

    caracteristici: extinderea claselor

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    85/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s

      .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    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

    d l l

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    86/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Cel mai general prototype este cel al lui Object 

    una dintre metodele disponibile – predefinite –este toString() care poate fi suprascrisă (over-ride)

    caracteristici: extinderea claselor

    i i i i d l l

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    87/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    var tux = new Animal ("Tux", 17);

    tux.toString ()   [object Object]

     Animal.prototype.toString = function () {return '' + this.oferaNume () + '';

    };

    tux.toString ()   "Tux"

    caracteristici: extinderea claselor

    Atenț ie la pericole! – e.g., comportamentul diferit 

    al construcț iei for (var  proprietate in obiect )

    i i i i d l l

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    88/190

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Șablon general:

    ClasaDeBaza = function () { /* … */ };SubClasa = function () { /* … */ };

    SubClasa.prototype = new ClasaDeBaza ();

    caracteristici: extinderea claselor

    i i i

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    89/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    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

    i i i î l

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    90/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    JavaScript oferă un singur spaț iu de nume,

    la nivel global

    conflicte privind denumirea funcț iilor/variabilelor

    specificate de programe diferite,concepute de mai multi dezvoltatori

    caracteristici: încapsulare

    t i ti i î l

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    91/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Nu trebuie afectat spaț iul de nume global,

    păstrându-se codul-sursă la nivel privat 

    caracteristici: încapsulare

    t i ti i î l

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    92/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Codul poate fi complet încapsulat 

    via funcț ii anonime

    care „păstrează” construcț iile la nivel privat 

    caracteristici: încapsulare

    t i ti i l

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    93/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    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

    t i ti i l

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    94/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Șablonul general:

     // specificarea unei expresii de tip funcție( function () {

     // variabilele și funcțiile vor fi vizibile doar aici // variabilele globale pot fi accesate

    } ( ) );

    caracteristici: closures

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    95/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /var cod = (function () {

    var priv = 0; // variabilă privată

    function start (x) {// ... poate accesa 'priv'// ș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 (arg); // apelăm 'start'

    via closures, simulăm metodele private

    modularizarea codului (module pattern)

    var makeCounter = function () {

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    96/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    () {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;}

    };};

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    97/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    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 */

    de eți t!

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    98/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Totul în JavaScript este obiect – chiar și funcț iile

    de reținut!

    de rețin t!

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    99/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Orice obiect este întotdeauna mutabil

    (poate fi alterat oricând)

    propriet ăț ile și metodele sunt disponibileoriunde în program ( public scope)

    de reținut!

    de reținut!

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    100/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f     s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    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!

    de reținut!

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    101/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Funcț iile ascund orice e definit în interiorul lor

    de reținut!

    de reținut!

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    102/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Operatorul new creează obiecte aparț inând

    „clasei” specificate de funcț ia constructor

    de reținut!

    de reținut!

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    103/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Accesorul this este relativ la contextul execuț iei,

    nu al declarării

    de reținut!

    Atenție la dependențade mediul de execuție!

    de reținut!

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    104/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Proprietatea prototype are valori modificabile

    de reținut!

    json

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    105/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

     JavaScript Object Notation

    http://json.org/

    json

    json

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    106/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    Format compact pentru interschimb de date

    – în termeni de obiecte și literali – între aplicaț ii

    biblioteci de procesare și alte resurse de interes:

    http://jsonauts.github.io/

    json

     // definim un șir de caractere ce specifică diverse construcții JSON // (e.g., preluarea datelor via Ajax/WebSocket-uri de la un serviciu Web/API)

    i T '{ " " "T " " t " 33 " d l" [ " did" " it " ] }'

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    107/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    var sirTux = '{ "nume": "Tux", "stoc": 33, "model": [ "candid", "viteaz" ] }';

    var tux;

    try { // procesăm șirul pentru a genera un obiect JS via obiectul JSONtux = JSON.parse (sirTux);} catch (e) { console.log (e.message); /* eroare :( */ }

     // obiectul 'tux' generat cu JSON.parse ()

    console.log (tux);

     // serializare ca șir de caractereconsole.log (JSON.stringify (tux));

    procesare recurgând la

    obiectul predefinit JSON

    instrumente

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    108/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    procesare strictă a limbajului: "use strict";

    verificare statică a codului: JSLint , JSHint , ESLint 

    suport pentru unit testing: Jasmine, Qunit , Sinon.js, Tyrtle

    documentarea codului: JSDoc Toolkit 

    optimizare de cod: Closure Compiler, Scriptalizer

    pachete & workflow -uri: Bower, Grunt , Yeoman,…

    de studiat și S. Buraga, „Ingineria dezvoltării aplicaț iilor JavaScript ”

    http://profs.info.uaic.ro/~busaco/teach/courses/cliw/web-film.html#week10

    instrumente

    instrumente

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    109/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    instrumente

    www.codefellows.org/blog/a-list-of-foundational-javascript-tools

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    110/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    ECMAScript 2015 (ES6)

    noua specificație standardizată (ediția VI, iunie 2015)

    http://www.ecma-international.org/ecma-262/6.0/

    lista facilităților:

    https://github.com/lukehoban/es6featureshttp://es6-features.org/

    instrumente ES6: https://github.com/addyosmani/es6-tools

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    111/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /ECMAScript 2015 (ES6)

    definirea de clase – perspectiva paradigmei obiectuale

    parametri cu valori implicite și parametri multipli

    machete pentru șiruri de caractere (template literals)

    declararea succintă a funcțiilor anonime (arrow functions)iteratori și generatori

    notificări privind rezultatul oferit de o funcție ( promises)

    noi tipuri de date – e.g., Map, Set, Proxy, Reflection

    modularizarea codului: module + importuri…

    http://profs.info.uaic.ro/~busaco/teach/courses/cliw/web-film.html#week13

    (în loc de) pauză

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    112/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    113/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    N-am putea dezvolta în JavaScript 

    aplicații Web la nivel de server?

    node js: caracterizare

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    114/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    node.js: caracterizare

    “ Node.js® is a JavaScript runtime built on Chrome’s

    V8 JavaScript engine. Node.js uses an event-driven ,

    non-blocking I/O model that makes it lightweight and

    efficient. Node.js’ package ecosystem – npm – is the largest

    ecosystem of open source libraries in the world .” 

    “Node.js is designed to build 

    scalable network applications.”

    Ryan Dahl concepe Node.js (2009) – http://nodejs.org/

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    115/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /rulează pe mașini respectând POSIX + Windows (2011)

    adoptat de industrie (2012)e.g., Cloud9 IDE, eBay, LinkedIn, Storify, Yahoo!

    Node.js Foundation (2015)IBM, Intel, Joyent, Microsoft, RedHat, SAP, The Linux Foundation,…

    io.js – o variantă Node.js concepută în ES6 al cărei cod-

    sursă a fost încorporat în Node.js 4 (2015)

    Node.js 4.4.0 LTS – Long Term Support (8 martie 2016)versiune stabilă actuală pentru uz în producție

    Node.js 5.8.0 – caracter experimental, în dezvoltarehttps://nodejs.org/en/blog/community/node-v5/

    node js

  • 8/19/2019 Web05DezvoltareaAplicatiilorWeb Javascript Nodejs

    116/190

       D   r .   S   a    b

        i   n

       B   u   r   a   g   a 

         p     r     o       f

         s  .       i     n       f     o  .     u     a       i     c  .     r     o        /    ~       b     u

         s     a     c     o        /

    node.js

    Permite dezvoltarea de aplicaț ii Web