web-javascript.pdf

Upload: nicu-manea

Post on 06-Jul-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 web-javascript.pdf

    1/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a

       c   o

    o prezentare generala a limbajului JavaScript

    Tehnologii Web

    Programare Web – supliment

  • 8/18/2019 web-javascript.pdf

    2/155

  • 8/18/2019 web-javascript.pdf

    3/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Inventat de Brendan Eich (1995)

    denumit initial LiveScript

    istoric

  • 8/18/2019 web-javascript.pdf

    4/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Implementat in premiera de browser -ul

    Netscape Navigator

    istoric

  • 8/18/2019 web-javascript.pdf

    5/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .

       p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Adaptat de Microsoft: JScript  (1996)

    istoric

  • 8/18/2019 web-javascript.pdf

    6/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .

       p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Standardizat in 1997 de ECMA

    European Computer Manufacturers Association

    ECMAScript

    ECMA-262

    www.ecma-international.org

    istoric

  • 8/18/2019 web-javascript.pdf

    7/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .

       p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Standardizat in 1997 de ECMA

    European Computer Manufacturers Association

    ECMAScript

    versiunea standardizata actuala: 5.1 (iunie 2011)

    versiunea in lucru: 6.0 (în curând)

    www.ecma-international.org/publications/standards/Ecma-262.htm

    istoric

  • 8/18/2019 web-javascript.pdf

    8/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .

       p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Limbaj de tip script  (interpretat)

    caracteristici

  • 8/18/2019 web-javascript.pdf

    9/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .

       p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Limbaj de tip script  (interpretat)

    destinat sa manipuleze, sa automatizeze

    si sa integreze facilitatile oferite

    de un anumit sistem

    caracteristici

  • 8/18/2019 web-javascript.pdf

    10/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .

       p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Limbaj de tip script  (interpretat)

    nu necesita intrari/iesiri in mod implicit

    caracteristici

  • 8/18/2019 web-javascript.pdf

    11/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Cum putem executa programele JavaScript?

  • 8/18/2019 web-javascript.pdf

    12/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Mediu de executie (host-environment )

    navigator Web

    permite rularea de aplicatii Web la nivelul unei platforme

    (un sistem de operare)

    desktop (e.g., Windows 8)

    mobil (Android, iOS, WP7, WP8)

    … 

    caracteristici

  • 8/18/2019 web-javascript.pdf

    13/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Mediu de executie (host-environment )

    navigator Web

    “injectarea” de cod JavaScript  

    in documentele (X)HTML via elementul  

    caracteristici

  • 8/18/2019 web-javascript.pdf

    14/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Mediu de executie (host-environment )

    navigator Web

    “injectarea” de cod JavaScript  

    in documentele (X)HTML via elementul

    cod extern vs. cod inclus in pagina Web 

    caracteristici

  • 8/18/2019 web-javascript.pdf

    15/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Mediu de executie (host-environment )

    platforma de dezvoltare a aplicatiilor

    e.g., Flex/AIR

    caracteristici

  • 8/18/2019 web-javascript.pdf

    16/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Mediu de executie (host-environment )

    software de sine-statator

    Adobe Creative Suite, UltraEdit etc.

    caracteristici

  • 8/18/2019 web-javascript.pdf

    17/155

       D   r .   S   a    b    i   n

       B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Mediu de executie (host-environment )

    procesor (engine) independent

    exemplificare:

    Yahoo! Widget Engine

    caracteristici

  • 8/18/2019 web-javascript.pdf

    18/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Mediu de executie (host-environment )

    componente ale sistemului de operare

    Dashboard  – Mac OS X

    Sidebar  – Windows Vista/7

    caracteristici

  • 8/18/2019 web-javascript.pdf

    19/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Mediu de executie (host-environment )

    server Web

    exemplu tipic: node.js

    caracteristici

  • 8/18/2019 web-javascript.pdf

    20/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    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/18/2019 web-javascript.pdf

    21/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    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/18/2019 web-javascript.pdf

    22/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Number 

    reprezentare in dubla precizie

    stocare pe 64 biti

    caracteristici: tipuri de date

  • 8/18/2019 web-javascript.pdf

    23/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    String 

    secvente de caractere Unicode

    fiecare caracter ocupa 16 biti

    caracteristici: tipuri de date

  • 8/18/2019 web-javascript.pdf

    24/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Boolean 

    secvente ce se pot evalua ca fiind true/ false 

    caracteristici: tipuri de date

  • 8/18/2019 web-javascript.pdf

    25/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Object  

    Function 

    Array 

    Date 

    RegExp

    si altele

    caracteristici: tipuri de date

  • 8/18/2019 web-javascript.pdf

    26/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Null 

    semnifica “nici o valoare” 

    caracteristici: tipuri de date

  • 8/18/2019 web-javascript.pdf

    27/155

  • 8/18/2019 web-javascript.pdf

    28/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Nu exista valori intregi

    caracteristici: tipuri de date 

  • 8/18/2019 web-javascript.pdf

    29/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Nu exista valori intregi

    convertirea unui sir in numar: parseInt () 

    parseInt ("123")  123

    parseInt ("11", 2)  3

    caracteristici: tipuri de date 

    indica baza

    de numeratie

  • 8/18/2019 web-javascript.pdf

    30/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Operatii avansate cu numere se pot realiza

    via obiectul predefinit Math 

    caracteristici: tipuri de date 

  • 8/18/2019 web-javascript.pdf

    31/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Operatii avansate cu numere se pot realiza

    via obiectul predefinit Math

    constante predefinite: 

    Math.PI

    Math.EMath.LN10 

    etc.

    caracteristici: tipuri de date 

  • 8/18/2019 web-javascript.pdf

    32/155

  • 8/18/2019 web-javascript.pdf

    33/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    “Valoarea” NaN (“not a number ”) 

    parseInt ("Salut")  NaN

    isNaN (NaN + 3)  true

    caracteristici: tipuri de date 

  • 8/18/2019 web-javascript.pdf

    34/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Valori speciale:

    Infinity

     –Infinity

    caracteristici: tipuri de date 

  • 8/18/2019 web-javascript.pdf

    35/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Un caracter reprezinta un sir de lungime 1

    caracteristici: tipuri de date 

  • 8/18/2019 web-javascript.pdf

    36/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Sirurile sunt obiecte

    "Salut".length  5

    caracteristici: tipuri de date 

  • 8/18/2019 web-javascript.pdf

    37/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Metode pentru siruri:

    s.charAt(pos) s.charCodeAt(pos) s.concat(s1, ..)

    s.indexOf (s1, start)

    s.match(regexp) s.replace(search, replace)

    s.slice(start, end) s.split(separator, limit)

    s.substring(start, end)s.toLowerCase() s.toUpperCase()

    etc.

    caracteristici: tipuri de date 

  • 8/18/2019 web-javascript.pdf

    38/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Valorile 0, "", NaN, null, undefined

    sunt interpretate ca fiind false

    !!234  true

    caracteristici: tipuri de date 

  • 8/18/2019 web-javascript.pdf

    39/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Variabilele se declara cu var

    var  marime;var  numeAnimal = "Tux";

    variabilele declarate fara valori asignate,

    se considera undefined 

    caracteristici: variabile

  • 8/18/2019 web-javascript.pdf

    40/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Daca nu se foloseste var ,

    atunci variabila este considerata globala

    de evitat asa ceva! 

    caracteristici: variabile

  • 8/18/2019 web-javascript.pdf

    41/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Valorile sunt “legate” tardiv la variabile

    (late binding)

    caracteristici: variabile

  • 8/18/2019 web-javascript.pdf

    42/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Mai nou, exista posibilitatea marginirii

    domeniului de vizibilitate (scope) via let

    var x = 5;

    var y = 0;

    console.log (let (x = x + 10, y = 12) x + y);  // 27

    console.log (x + y);  // 5

    caracteristici: variabile

  • 8/18/2019 web-javascript.pdf

    43/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Pentru numere: + – * / %

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

    Incrementare & decrementare: ++ –  – 

    Concatenare de siruri: "Java" + "Script"  "JavaScript"

    caracteristici: operatori

  • 8/18/2019 web-javascript.pdf

    44/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Conversia tipurilor se face “din zbor” 

    "3" + 4 + 5  345

    3 + 4 + "5"  75

    adaugând un sir vid la o expresie,o convertim pe aceasta la string

    caracteristici: operatori

  • 8/18/2019 web-javascript.pdf

    45/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Comparatii: < > = (numere & siruri)

    egalitatea se testeaza cu == si !=

    1 == true 

     true

    caracteristici: operatori

  • 8/18/2019 web-javascript.pdf

    46/155

       D   r .   S   a    b    i

       n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Comparatii: < > = (numere & siruri)

    egalitatea se testeaza cu == si !=

    1 == true 

     truea se folosi: 1 === true  false 

    caracteristici: operatori

    inhiba conversia

    tipurilor de date

  • 8/18/2019 web-javascript.pdf

    47/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Aflarea tipului unei expresii: operatorul typeoftypeof "Tux"  string

    caracteristici: operatori 

  • 8/18/2019 web-javascript.pdf

    48/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s

       a   c   o

    Operatorii logici && si ||

    var nume = unNume || "Implicit"; 

    caracteristici: operatori 

  • 8/18/2019 web-javascript.pdf

    49/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Operatorul de test ? :

    var prezenta = (studenti > 33) ? "Prea multi" : "Cam putini…"; 

    caracteristici: operatori 

  • 8/18/2019 web-javascript.pdf

    50/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Testare: if … else, switchpentru switch, sunt permise expresii la fiecare case

    (testarea se realizeaza cu operatorul ===)

    switch (2 + 3) { /* sunt permise expresii */ 

    case 4 + 1 : egalitate ();

    break; 

    default  : absurd (); // nu se apeleaza niciodata 

    }

    caracteristici: control

  • 8/18/2019 web-javascript.pdf

    51/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    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/18/2019 web-javascript.pdf

    52/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Exceptii: try … catch … finally 

    try {

    // Linii "periculoase" ce pot cauza exceptii } catch (eroare) {// Linii executate la aparitia unei/unor exceptii

    } finally {// Linii care se vor executa la final 

    }

    caracteristici: control 

  • 8/18/2019 web-javascript.pdf

    53/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Exceptii: try … catch … finally 

    try {

    // Linii "periculoase" ce pot cauza exceptii } catch (eroare) {// Linii executate la aparitia unei/unor exceptii

    } finally {// Linii care se vor executa la final 

    }

    emiterea unei exceptii: throw

    throw new Error  ("O eroare de-a noastra!...");

    caracteristici: control 

  • 8/18/2019 web-javascript.pdf

    54/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Perechi nume—valoare

    caracteristici: obiecte

  • 8/18/2019 web-javascript.pdf

    55/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Perechi nume—valoare

    tabele de dispersie (hash) in C/C++

    tablouri asociative in Perl, PHP sau Ruby

    HashMaps in Java

    caracteristici: obiecte

  • 8/18/2019 web-javascript.pdf

    56/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Perechi nume—valoare

    numele este desemnat de un sir de caractere

    valoarea poate fi de orice tip

    caracteristici: obiecte

  • 8/18/2019 web-javascript.pdf

    57/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Obiect  colectie de proprietati,

    avand mai multe atribute

    proprietatile pot contine alte obiecte,

    valori primitive sau metode

    caracteristici: obiecte

  • 8/18/2019 web-javascript.pdf

    58/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Global

    Object

    FunctionArray

    String

    Boolean

    NumberMath

    Date

    Regex

    caracteristici: obiecte predefinite

  • 8/18/2019 web-javascript.pdf

    59/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Create prin intermediul operatorului new:

    var ob = new Object();

    var ob = { }; // echivalent cu linia anterioara

    caracteristici: obiecte 

  • 8/18/2019 web-javascript.pdf

    60/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Create prin intermediul operatorului new:

    var ob = new Object();

    var ob = { }; // echivalent cu linia anterioara

    caracteristici: obiecte 

    se prefera aceasta sintaxa

  • 8/18/2019 web-javascript.pdf

    61/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Accesarea proprietatilor – operatorul .

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

    caracteristici: obiecte 

  • 8/18/2019 web-javascript.pdf

    62/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Accesarea proprietatilor:

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

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

    var nume = ob["nume"];

    caracteristici: obiecte 

  • 8/18/2019 web-javascript.pdf

    63/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Declarare + asignare:

    var pinguin = {nume: "Tux",

    proprietati: {

    culoare: "verde",

    marime: 17}

    }

    caracteristici: obiecte 

  • 8/18/2019 web-javascript.pdf

    64/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Accesare:

    pinguin.proprietati.marime

     17

    pinguin["proprietati"]["culoare"]  verde

    caracteristici: obiecte 

  • 8/18/2019 web-javascript.pdf

    65/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Iterarea proprietatilor – considerate chei:

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

    for (var proprietate in pinguin) {

    afiseaza (proprietate + ' = ' + pinguin[proprietate]);}

    caracteristici: obiecte 

  • 8/18/2019 web-javascript.pdf

    66/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Tipuri speciale de obiecte

    proprietatile (cheile) sunt numere,nu siruri de caractere

    caracteristici: tablouri

  • 8/18/2019 web-javascript.pdf

    67/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Se poate utiliza sintaxa de la obiecte:

    var animale = new Array ();animale[0] = "pinguin";animale[1] = "omida";animale[2] = "pterodactil";

    animale.length  3

    caracteristici: tablouri

  • 8/18/2019 web-javascript.pdf

    68/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Se poate utiliza sintaxa de la obiecte:

    var animale = new Array ();animale[0] = "pinguin";animale[1] = "omida";animale[2] = "pterodactil";

    animale.length  3

    notatie alternativa – preferata:

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

    caracteristici: tablouri

  • 8/18/2019 web-javascript.pdf

    69/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Tablourile pot avea “gauri” (sparse arrays):

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

    animale.length  34

    typeof animale[13]  undefined

    caracteristici: tablouri 

  • 8/18/2019 web-javascript.pdf

    70/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Tablourile pot avea “gauri” (sparse arrays):

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

    animale.length  34

    typeof animale[13]  undefined

    pentru a adauga elemente putem recurge la:

    animale[animale.length] = altAnimal;

    caracteristici: tablouri 

  • 8/18/2019 web-javascript.pdf

    71/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    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 dupa John Kugelman (2009)

  • 8/18/2019 web-javascript.pdf

    72/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    rezultatul obtinut in urma rularii programului JavaScript

    via JS Bin

  • 8/18/2019 web-javascript.pdf

    73/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Interari:

    for (var it = 0; it < animale.length; it++) {// de prelucrat animale[it]

    }

    caracteristici: tablouri 

  • 8/18/2019 web-javascript.pdf

    74/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Interari:

    for (var it = 0; it < animale.length; it++) {// de prelucrat animale[it]

    }

    // varianta mai buna for (var it = 0, lung = animale.length; it < lung; it++) {

    // de prelucrat animale[it]

    }

    caracteristici: tablouri 

    de ce?

  • 8/18/2019 web-javascript.pdf

    75/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Elementele pot apartine

    unor tipuri de date eterogene

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

    caracteristici: tablouri 

  • 8/18/2019 web-javascript.pdf

    76/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    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 

  • 8/18/2019 web-javascript.pdf

    77/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Definite via function

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

    }

    caracteristici: functii

  • 8/18/2019 web-javascript.pdf

    78/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Daca nu este intors nimic in mod explicit,

    valoarea de retur se considera undefined 

    caracteristici: functii

  • 8/18/2019 web-javascript.pdf

    79/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Parametrii pot lipsi, fiind considerati undefined 

    caracteristici: functii

  • 8/18/2019 web-javascript.pdf

    80/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Pot fi transmise mai multe argumente,

    cele in surplus fiind ignorate

    transformaPixeliInPuncte (10, 7)  3000

    caracteristici: functii

  • 8/18/2019 web-javascript.pdf

    81/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Argumentele primite de o functie se acceseaza

    via tabloul arguments:

    function aduna () {

    var suma = 0;

    for (var i = 0, j = arguments.length; i < j; i++) {

    suma += arguments[i];}

    return suma;

    }

    caracteristici: functii 

  • 8/18/2019 web-javascript.pdf

    82/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Functiile sunt tot obiecte

    astfel, pot fi specificate functii anonime

    caracteristici: functii 

    expresii

    lambda

  • 8/18/2019 web-javascript.pdf

    83/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Functiile sunt tot obiecte

    astfel, pot fi specificate functii anonime

    in acest sens, JavaScript este un limbaj functional

    caracteristici: functii 

    expresii

    lambda

  • 8/18/2019 web-javascript.pdf

    84/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    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: functii 

  • 8/18/2019 web-javascript.pdf

    85/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

  • 8/18/2019 web-javascript.pdf

    86/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    precizati ce efect vor avea liniile de cod urmatoare:

    console.log ( typeof  (media) );

    console.log ( media() );

  • 8/18/2019 web-javascript.pdf

    87/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    variabila media este de tip function

    apelul media() intoarce valoarea NaN 

  • 8/18/2019 web-javascript.pdf

    88/155

  • 8/18/2019 web-javascript.pdf

    89/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

       // varianta folosind functii anonime 

    var nrCaractDoc = (function (element) {

    if (element.nodeType == 3) { // nod text 

    return element.nodeValue.length;

    }var contor = 0;

    for (var it = 0, copil; copil = element.childNodes[it]; it++) {

    contor  += arguments.callee (copil);

    }return contor ;

    }) (xml.root);

    furnizeaza care-i

    functia apelanta

    i i i d l f ii l l

  • 8/18/2019 web-javascript.pdf

    90/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Exemplificare:

    dorim sa procesam – via functii – 

    caracteristici ale unor animale

    caracteristici: de la functii la clase

    t i ti i d l f tii l l

  • 8/18/2019 web-javascript.pdf

    91/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

      function creeazaAnimal (nume, marime) {return { nume: nume, marime: marime }

    }

    function oferaNume (animal) {return animal.nume;

    }function oferaMarime (animal) {

    return animal.marime;} 

    caracteristici: de la functii la clase

    t i ti i d l f tii l l

  • 8/18/2019 web-javascript.pdf

    92/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

      function creeazaAnimal (nume, marime) {return { nume: nume, marime: marime }

    }

    function oferaNume (animal) {return animal.nume;

    }function oferaMarime (animal) {

    return animal.marime;}

    var tux = creeazaAnimal ("Tux", 17);

    oferaMarime (tux) 

     17

    caracteristici: de la functii la clase

    t i ti i d l f tii l l

  • 8/18/2019 web-javascript.pdf

    93/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    O “clasa” referitoare la animale:

    function creeazaAnimal (nume, marime) {return {

    nume: nume, // date-membremarime: marime,oferaNume: function () { // metoda 

    return animal.nume;},

    oferaMarime: function () { // metoda return animal.marime;

    }}

    caracteristici: de la functii la clase 

    t i ti i d l f tii l l

  • 8/18/2019 web-javascript.pdf

    94/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Apelarea metodelor definite:

    var tux = creeazaAnimal ("Tux", 17);

    tux.oferaMarime()  17

    caracteristici: de la functii la clase 

    t i ti i d l f tii l l

  • 8/18/2019 web-javascript.pdf

    95/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w

     .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Apelind insa o functie fara notatia cu “.”, 

    nu obtinem rezultatul scontat:

    var marimea = tux.oferaMarimea;

    oferaMarimea ()  undefined 

    caracteristici: de la functii la clase 

    t i ti i d l f tii l l

  • 8/18/2019 web-javascript.pdf

    96/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Apelind insa o functie fara notatia cu “.”, 

    nu obtinem rezultatul scontat:

    var marimea = tux.oferaMarimea;

    oferaMarimea ()  undefined

    obiectul curent (“this”) este setat ca fiind obiectul global

    (in browser , reprezinta fereastra curenta

    in care este redat documentul: this  window)

    caracteristici: de la functii la clase 

    t i ti i d l f tii l l

  • 8/18/2019 web-javascript.pdf

    97/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

      function Animal (nume, marime) {

    this.nume = nume; // date-membre

    this.marime = marime;

    this.oferaNume = function () { // metoda 

    return this.nume;

    };

    this.oferaMarime = function () { // metoda return this.marime;

    };

    caracteristici: de la functii la clase 

    creational pattern

    te i ti i de l f tii l l e

  • 8/18/2019 web-javascript.pdf

    98/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

      function Animal (nume, marime) {

    this.nume = nume; // date-membre

    this.marime = marime;

    this.oferaNume = function () { // metoda 

    return this.nume;

    };

    this.oferaMarime = function () { // metoda return this.marime;

    };

    caracteristici: de la functii la clase 

    clase – utilizareaconstructorilor

    caracteristici: de la functii la clase

  • 8/18/2019 web-javascript.pdf

    99/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

      function Animal (nume, marime) {

    this.nume = nume; // date-membre

    this.marime = marime;

    this.oferaNume = function () { // metoda 

    return this.nume;

    };

    this.oferaMarime = function () { // metoda return this.marime;

    };

    caracteristici: de la functii la clase 

    clase – utilizareaconstructorilor

    var tux = new Animal ("Tux", 17); // instantierea unui obiect

    caracteristici: functii & obiecte

  • 8/18/2019 web-javascript.pdf

    100/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Operatorul new creaza un nou obiect vid si

    apeleaza functia specificata cu this setat pe acest obiect

    aceste functii se numesc constructori,

    trebuie apelate via new 

    si, prin conventie, au numele scris cu litera mare

    caracteristici: functii & obiecte 

  • 8/18/2019 web-javascript.pdf

    101/155

    caracteristici: prototipuri

  • 8/18/2019 web-javascript.pdf

    102/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Structura unei clase poate fi extinsa ulterior,

    folosind proprietatea prototype 

    caracteristici: prototipuri

    caracteristici: prototipuri

  • 8/18/2019 web-javascript.pdf

    103/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Structura unei clase poate fi extinsa ulterior,

    folosind proprietatea prototype

    un prototip e o proprietate oferind o legatura ascunsa

    caracteristici: prototipuri

    caracteristici: prototipuri

  • 8/18/2019 web-javascript.pdf

    104/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Structura unei clase poate fi extinsa ulterior,

    folosind proprietatea prototype

    daca se incearca accesarea unui element inexistent

    in cadrul unui obiect dat,

    se va verifica lantul de prototipuri ( prototype chain)

    caracteristici: prototipuri

    caracteristici: prototipuri

  • 8/18/2019 web-javascript.pdf

    105/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    caracteristici: prototipuri

    ObjA

    this.initA ( )ObjB

    this.initB ( ) ObjC

    this.initC ( )

    var  test = new objC ( )

    test.initA ( );

    ObjB.prototype = new ObjA ( );

    ObjC.prototype = new ObjB ( );

    dupa Subramanyan Murali, “JavaScript Design Patterns”, 2008 

    caracteristici: prototipuri

  • 8/18/2019 web-javascript.pdf

    106/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

      function Animal (nume, marime) { // definitie initiala

    this.nume = nume;

    this.marime = marime;

    }

     Animal.prototype.oferaNume = function() {

    return this.nume;

    }; Animal.prototype.oferaMarime = function() {

    return this.marime;

    };

    caracteristici: prototipuri

    caracteristici: prototipuri

  • 8/18/2019 web-javascript.pdf

    107/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Pentru a cunoaste tipul unui obiect

    (pe baza constructorului si a ierarhiei de prototipuri)

    se foloseste operatorul instanceof  

    caracteristici: prototipuri 

    caracteristici: prototipuri

  • 8/18/2019 web-javascript.pdf

    108/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    var marimi = [17, 20, 7, 14];

    marimi instanceof  Array   true

    marimi instanceof  Object   truemarimi instanceof  String   false

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

    tux instanceof  Object   true

    tux instanceof  Array   false

    caracteristici: prototipuri 

    caracteristici: extinderea claselor

  • 8/18/2019 web-javascript.pdf

    109/155

       D   r .   S   a    b

        i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u

       s   a   c   o

    Adaugarea unei metode se realizeaza via prototype 

     Animal.prototype.oferaNumeMare = function () {

    return this.nume.toUpperCase ();

    };

    tux.oferaNumeMare ()  "TUX"

    caracteristici: extinderea claselor

    caracteristici: extinderea claselor

  • 8/18/2019 web-javascript.pdf

    110/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Pot fi extinse si obiectele predefinite:

    // adaugam o metoda obiectului String 

    String.prototype.inverseaza = function () {var inv = '';

    for (var iter = this.length - 1; iter >= 0; iter--) { // inversam sirul… 

    inv += this[iter];

    }

    return inv;

    };

    "Web".inverseaza ()

    "beW"

    caracteristici: extinderea claselor 

    caracteristici: extinderea claselor

  • 8/18/2019 web-javascript.pdf

    111/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Cel mai general prototype este cel al lui Object

    Una dintre metodele disponibile este toString() care poate fi supra-scrisa (over-ride)

    caracteristici: extinderea claselor 

    caracteristici: extinderea claselor

  • 8/18/2019 web-javascript.pdf

    112/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    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 

  • 8/18/2019 web-javascript.pdf

    113/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    caracteristici: extinderea claselor

  • 8/18/2019 web-javascript.pdf

    114/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Atentie la pericole!

    de exemplu, comportamentul diferit al constructiei

    for (var proprietate in obiect)

    caracteristici: extinderea claselor 

    caracteristici: functii de nivel inalt

  • 8/18/2019 web-javascript.pdf

    115/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Deoarece o functie reprezinta un obiect, poate fi:

    stocata intr-o variabila

    pasata unei alte functii

    intoarsa de o functie – fiind argument pentru return 

    caracteristici: functii de nivel inalt 

    caracteristici: functii de nivel inalt

  • 8/18/2019 web-javascript.pdf

    116/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Dorim sa calculam greutatea unui animal,

    dupa formula greutate = marime * 33

    varianta clasica:

    var marimi = [17, 20, 7, 14];

    var greutati = [ ];for (var contor  = 0; contor  < marimi.length; contor ++) {

    greutati[contor ] = marimi[contor ] * 33;

    }

    caracteristici: functii de nivel inalt 

  • 8/18/2019 web-javascript.pdf

    117/155

    Varianta imbunatatita – mai generala:

    calcul e variabila

    de tip functie

  • 8/18/2019 web-javascript.pdf

    118/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w   w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   ofunction 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);

    fiind functie,

    se poate apela

  • 8/18/2019 web-javascript.pdf

    119/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    caracteristici: incapsulare

  • 8/18/2019 web-javascript.pdf

    120/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    JavaScript ofera un singur spatiu de nume,

    la nivel global

    conflicte privind denumirea functiilor/variabilelor

    specificate de programe diferite,concepute de mai multi dezvoltatori

    caracteristici: incapsulare

    caracteristici: incapsulare

  • 8/18/2019 web-javascript.pdf

    121/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Nu trebuie afectat spatiul de nume global,

    pastrându-se codul-sursa la nivel privat

    caracteristici: incapsulare

    caracteristici: incapsulare

  • 8/18/2019 web-javascript.pdf

    122/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Codul poate fi complet încapsulat

    via functii anonime

    care “pastreaza” constructiile la nivel privat

    caracteristici: incapsulare

    caracteristici: closures

  • 8/18/2019 web-javascript.pdf

    123/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Declararea imbricata – ca expresii de tip functie – 

    a functiilor anonime are denumirea closures

    https://developer.mozilla.org/en/JavaScript/Guide/Closures

    caracteristici: closures 

    caracteristici: closures

  • 8/18/2019 web-javascript.pdf

    124/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    // specificarea unei expresii de tip functie

    ( function () {

     // variabilele & functiile vor fi vizibile doar aici // variabilele globale pot fi accesate

    } ( ) ); 

    caracteristici: closures 

  • 8/18/2019 web-javascript.pdf

    125/155

     

    var cod = (function () { f ti f C ( ) {

  • 8/18/2019 web-javascript.pdf

    126/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    var cod = (function () {var n = 0; // variabila privata

    function start (x) {// ... poate accesa 'n'// si functia 'faCeva' 

    }function faAia (param) {

    // ... invizibila din afara }

    function faCeva (x, y) {// ...

    }return {// sunt publice doar// functiile 'start' si 'faCeva''start': start,'faCeva': faCeva 

    }}) ();

    cod.start (x); // apelam 'start'

    via closures, simulam metodele private

    modularizarea codului (module pattern)

    var makeCounter  = function () {var contorPrivat = 0;  // un contor de valori (initial, zero)function changeBy (val) { // functie privata

    // f

  • 8/18/2019 web-javascript.pdf

    127/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   ocontorPrivat += val;   // ce modifica valoarea contorului

    }

    return {   // functii publice (expuse)increment: function() {

    changeBy (1);},decrement: function() {

    changeBy (-1);},value: function() {

    return contorPrivat;

    }};}; 

    console.log (contor1.value ()); /* 0 */

    contor1.increment ();

    contor1.increment ();

    console.log (contor1.value ()); /* 2 */contor1.decrement ();

    console.log (contor1.value ()); /* 1 */

    console.log (contor2.value ()); /* 0 */

  • 8/18/2019 web-javascript.pdf

    128/155

       D   r .   S   a    b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

  • 8/18/2019 web-javascript.pdf

    129/155

    de retinut!

  • 8/18/2019 web-javascript.pdf

    130/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Orice obiect este intotdeauna mutabil

    (poate fi alterat oricând)

    toate proprietatile si metodelesunt disponibile oriunde ( public scope)

    de retinut!

  • 8/18/2019 web-javascript.pdf

    131/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b   u   s   a   c   o

    Nu exista vizibilitate la nivel de bloc de cod

    (block scope),

    ci doar la nivel global ori la nivel de functie

  • 8/18/2019 web-javascript.pdf

    132/155

    de retinut!

  • 8/18/2019 web-javascript.pdf

    133/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Operatorul “.” este echivalent

    cu de-referentierea:

    ob.prop === ob["prop"] 

    de retinut!

  • 8/18/2019 web-javascript.pdf

    134/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Operatorul new creeaza obiecte apartinând

    clasei specificate de functia constructor

    de retinut!

  • 8/18/2019 web-javascript.pdf

    135/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Accesorul this este relativ la contextul executiei,

    nu al declararii

    de retinut!

  • 8/18/2019 web-javascript.pdf

    136/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Accesorul this este relativ la contextul executiei,

    nu al declararii

    Atentie la dependenta

    de mediul de executie!

    de retinut!

  • 8/18/2019 web-javascript.pdf

    137/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Proprietatea prototype are valori modificabile

    json

  • 8/18/2019 web-javascript.pdf

    138/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

     JavaScript Object Notation

    http://json.org/

    j

    json

  • 8/18/2019 web-javascript.pdf

    139/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

     JavaScript Object Notation

    format compact pentru interschimb de date

    intre aplicatii 

    j

    json

  • 8/18/2019 web-javascript.pdf

    140/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

     JavaScript Object Notation

    datele pot fi specificatein termeni de obiecte & literali

  • 8/18/2019 web-javascript.pdf

    141/155

  • 8/18/2019 web-javascript.pdf

    142/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    exemplu concret: raspuns JSON obtinut in urma unei interogari YQL

    instrumente 

  • 8/18/2019 web-javascript.pdf

    143/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Editare de cod & dezvoltare de aplicatii Web

    TestareDocumentare a codului

    Compresie

    Optimizare

    instrumente: editare

  • 8/18/2019 web-javascript.pdf

    144/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Pentru desktop:

    Aptana Studio, JS Development Tools ( plug-in Eclipse),Sublime Text , Visual Studio (Express Edition),… 

    Disponibile pe Web:

    Cloud9 IDE, JS Bin, JS Fiddle etc.

    unele ofera si partajarea codului-sursa cu alti dezvoltatori

    instrumente: testare

  • 8/18/2019 web-javascript.pdf

    145/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Verificare statica

    instrumente de referinta:

    JSLint  

    JSHint

    instrumente: testare

  • 8/18/2019 web-javascript.pdf

    146/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Suport pentru unit testing 

    exemplificari:

    Jasmine

    JSTest.NET

    QUnitSinon.js

    Tyrtle

  • 8/18/2019 web-javascript.pdf

    147/155

    instrumente: documentarea codului

  • 8/18/2019 web-javascript.pdf

    148/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Software pentru documentarea programelor

    JSDoc Toolkit

    jGrouseDoc

    YUIDoc

  • 8/18/2019 web-javascript.pdf

    149/155

    o

    instrumente: optimizare javascript

  • 8/18/2019 web-javascript.pdf

    150/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Transformarea codului JS intr-unul optimizat

    exemplu de referinta:

    Closure Compiler

    https://developers.google.com/closure/ 

    o

    instrumente 

  • 8/18/2019 web-javascript.pdf

    151/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Facilitarea dezvoltarii de aplicatii Web

    la nivel de client similare celor desktop

    exemplificari notabile:

    Cappuccino – http://cappuccino.org/ 

    SproutCore – http://www.sproutcore.com/

    o

    instrumente 

  • 8/18/2019 web-javascript.pdf

    152/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Alte limbaje pentru dezvoltarea de aplicatii Web

    CoffeeScript  (Jeremy Ashkenas, 2009)

    http://coffeescript.org/

    TypeScript (Microsoft, 2012)

    http://www.typescriptlang.org/ 

    limbaje de programare care se compileaza in JavaScript

    o

    instrumente 

  • 8/18/2019 web-javascript.pdf

    153/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Portarea altor aplicatii in JavaScript

    Emscripten – compilator LLVM generand cod JS

    (e.g., programe C/C++, Lua, Python, Ruby

    ce se pot compila in JavaScript)

    http://emscripten.org/

    o

    instrumente 

  • 8/18/2019 web-javascript.pdf

    154/155

       D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    Portarea altor aplicatii in JavaScript

    JSIL – compilator care transforma aplicatiile .NET

    in programe JavaScript ruland independent de browser

    http://jsil.org/

    o

  • 8/18/2019 web-javascript.pdf

    155/155

    D   r .   S   a

        b    i   n   B   u   r   a   g   a 

       w   w

       w .   p   u   r    l .   o   r   g    /   n   e   t    /    b

       u   s   a   c   o

    ?