SlideShare a Scribd company logo
JavaScript
     Dr. Sabin Buraga
  www.purl.org/net/busaco
         @busaco
“Cu cat cunosti mai bine,
cu atat iubesti mai mult.”



   Leonardo da Vinci
inventat de Brendan Eich (1995)
denumit initial LiveScript
implementat in Netscape Navigator
adaptat de Microsoft: JScript (1996)
standardizat in 1997 de ECMA
European Computer Manufacturers Association
      www.ecma-international.org
limbaj de tip script (interpretat)
limbaj de tip script (interpretat)

destinat sa manipuleze, sa automatizeze
    si sa integreze facilitatile oferite
           de un anumit sistem
limbaj de tip script (interpretat)

nu necesita intrari/iesiri in mod implicit
Cum putem executa programele
         JavaScript?
mediu de executie
       (host-environment):

         navigator Web

    “injectarea” de cod JavaScript
in documentele (X)HTML via <script>
mediu de executie
  (host-environment):

platforma de dezvoltare
      a aplicatiilor

   e.g., Adobe Flex/AIR
mediu de executie
      (host-environment):

  aplicatie de sine-statatoare

Adobe Creative Suite, UltraEdit etc.
mediu de executie
     (host-environment):

procesor (engine) independent

   e.g., Yahoo! Widget Engine
mediu de executie
   (host-environment):

       componente
ale sistemului de operare

  Dashboard – Mac OS X
Sidebar – Windows Vista/7
cuvinte rezervate:
break else new var case finally return
 void catch for switch while continue
  function this with default if throw
   delete in try do instanceof typeof
alte cuvinte rezervate:
   abstract enum int short boolean export
  interface static byte extends long super
 char final native synchronized class float
package throws const goto private transient
   debugger implements protected volatile
            double import public
tipuri de date:

               Number
  dubla precizie, stocare pe 64 biti
               String
secvente de caractere Unicode, 16 biti
              Boolean
secvente ce se pot evalua ca true/false
               Object
    Function, Array, Date, RegExp
                Null
      semnifica “nici o valoare”
             Undefined
    “nici o valoare asignata inca”
“valoarea” NaN – “not a number”


  parseInt ("Salut")NaN

   isNaN (NaN + 33)true
valori speciale:

   Infinity
  –Infinity
un caracter reprezinta
 un sir de lungime 1

 sirurile sunt obiecte



 "Salut".length5
valorile 0, "", NaN, null, undefined
  sunt interpretate ca fiind false
variabile sunt declarate cu var

        var marime;
  var numeAnimal = "Tux";
variabilele declarate fara valori asignate,
         se considera undefined
daca nu se foloseste var,
atunci variabila este considerata globala


          de evitat asa ceva!
conversia tipurilor se face “din zbor”

         "3" + 4 + 5345
         3 + 4 + "5"75
pentru a afla tipul unei expresii,
      se foloseste typeof

     typeof "Tux"string
instructiuni de control

testare: if ... else, switch
instructiuni de control

ciclare: while, do ... while, for
instructiuni de control

exceptii: try ... catch ... finally

   emiterea unei exceptii: throw
obiecte

       perechi nume—valoare

 tabele de dispersie (hash) in C/C++
tablouri asociative in Perl, PHP, Ruby
          HashMaps in Java
obiecte

  perechi nume—valoare

   numele este desemnat
   de un sir de caractere

valoarea poate fi de orice tip
obiecte

     colectii de proprietati,
    avand mai multe atribute


proprietatile pot contine alte obiecte,
    valori primitive sau metode
obiecte

in JavaScript, se predefinesc obiectele

                Global
                Object
               Function
                Array
                String
               Boolean
                Number
                 Math
                 Date
obiecte

create prin intermediul lui new


var obiect = new Object();

var obiect = {};
// echivalent cu linia anterioara
obiecte

  accesarea proprietatilor


obiect.nume = "Tux";
var nume = obiect.nume;
obiecte

  accesarea proprietatilor


obiect.nume = "Tux";
var nume = obiect.nume;

          echivalent:

obiect["nume"] = "Tux";
var nume = obiect["nume"];
obiecte

declarare + asociere de valori

var pingu = {
     nume: "Tux",
     proprietati: {
          culoare: "oranj",
          marime: 17
     }
}
tablouri

sunt tipuri speciale de obiecte



 proprietatile sunt numere,
   nu siruri de caractere
tablouri

var zoo = new Array ();
zoo[0] = "pinguin";
zoo[1] = "omida";
zoo[2] = "urs";

zoo.length3
tablouri

    var zoo = new Array ();
    zoo[0] = "pinguin";
    zoo[1] = "omida";
    zoo[2] = "urs";

    zoo.length3


          notatie alternativa:

var zoo = ["pinguin", "omida", "urs"];
tablouri

                iterari:

for (var iter = 0;
     iter < zoo.length; iter++) {
   // de prelucrat zoo[iter]
}

for (var iter = 0, lung = zoo.length;
     iter < lung; iter++) {
   // varianta mai buna
   // de prelucrat zoo[iter]    de ce?
}
tablouri

       elementele pot apartine
     unor tipuri de date eterogene


var zoo = [16, "musca", true, "gaga"];
functii

         obiecte definite prin function


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

 argumentele primite de o functie
se acceseaza via tabloul arguments
functii

pot fi specificate functii anonime


                            expresii
                            lambda
functii

        pot fi specificate functii anonime


                                     expresii
                                     lambda


in acest sens, JavaScript este un limbaj functional
var media = function () { // calculul mediei
   var suma = 0;
   for (var iter = 0,
        lung = arguments.length;
        iter < lung; iter++) {
      suma += arguments[iter];
   }
   return suma / arguments.length;
}
putem incapsula functiile in clase?
de la functii la clase:
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;
   };
}
instantierea unui obiect:



var tux = new Animal ("Tux", 17);
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
structura unei clase poate fi extinsa ulterior,
      folosind proprietatea prototype
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;
}
pentru a cunoaste tipul unui obiect
    – pe baza constructorului si
     a ierarhiei de prototipuri –
se foloseste operatorul instanceof
var marimi = [17, 20, 7, 14];

 marimi instanceof Arraytrue
marimi instanceof Objecttrue
marimi instanceof Stringfalse
extinderea claselor

adaugarea unei metode se realizeaza via prototype
Animal.prototype.oferaNumeMare =
   function () {
     return this.nume.toUpperCase ();
   }

tux.oferaNumeMare ()"TUX"
in JavaScript, totul e considerat
ca fiind obiect – chiar si functiile
orice obiect e intotdeauna mutabil
      (poate fi alterat oricind)
operatorul . este echivalent
      cu de-referentierea:

obiect.prop === obiect["prop"]
functiile ascund orice este definit
          in interiorul lor
accesorul this este relativ
  la contextul executiei,
      nu al declararii
rularea in browser

programele JavaScript au acces la diverse obiecte
          oferite de navigatorul Web
rularea in browser

de pilda, poate fi accesat obiectul global window


   <script type="application/javascript">
   var nav = window.navigator.userAgent;
     // date privitoare la browser
   </script>
graceful degradation &
          progresive enhancement

conceperea “stratificata” a aplicatiilor JavaScript
graceful degradation &
        progresive enhancement

initial: interactiune minimala, fara JavaScript

    adaugarea progresiva a facilitatilor,
          in functie de context
graceful degradation &
          progresive enhancement

     inaintea folosirii oricarei tehnici dorite,
      de testat suportul oferit de navigator:
JavaScript, cookie-uri, clase/metode DOM, Ajax,…
JSON – JavaScript Object Notation

format compact pentru interschimb de date
             intre aplicatii
JSON – JavaScript Object Notation

folosit la serializarea datelor in contextul Web

       uzual, transfer (a)sincron de date
     intre servicii Web si aplicatii (clienti)
JSON – JavaScript Object Notation

defineste datele in termeni de obiecte & literali



                    json.org
{
    'nume' : 'Tux',
    'stoc' : 33,
    'gen' : ['candid', 'furios', 'vesel']
}
                            datele pot fi
                           evaluate direct
                            in JavaScript
instrumente

    medii de dezvoltare
      Aptana Studio

          depanare
        Firebug (Lite)
Visual Studio Developer 2010
instrumente

   testare (inginerie software)
JSLint, JsUnit, jsTrace, Selenium
instrumente

alte extensii/utilitare folositoare
GreaseMonkey, Ubiquity, Y! Slow
          SpiderMonkey
              Rhino
         JavaScript Shell
biblioteci

     Dojo: dojotoolkit.org
      jQuery: jquery.com
  Prototype: prototypejs.org
       Rico: openrico.org
Script.aculo.us: script.aculo.us
YUI: developer.yahoo.net/yui/
       …si multe altele
jQuery

          scop principal:
manipularea documentului HTML
pe baza selectorilor CSS – nivelul 3


ofera un API concis, usor de folosit,
       disponibil open source


        http://jquery.com/
     http://visualjquery.com/
jQuery

focalizarea asupra interactiunii
   dintre codul JavaScript si
     constructiile (X)HTML
jQuery

aproape orice operatie urmeaza regula:

            “gaseste ceva”
                   +
   “executa ceva cu ceea ce-ai gasit”
jQuery

accesul la nodurile documentului HTML
   se realizeaza via functia jQuery()

       notatie prescurtata: $()
// liniile de tabel de pe pozitii pare vor fi redate
// via proprietatile CSS din clasa ‘fundal-gri’
$("table tr:nth-child(even)").addClass("fundal-gri");

    obiect          selector            metoda
    jQuery            CSS            (functionalitate)
jQuery

selectarea nodurilor dorite recurge la
conventiile privitoare la selectorii CSS




  http://docs.jquery.com/Selectors
jQuery

          selectori “magici”:

  privitori la pozitie – :first :last
   vizibilitate – :hidden :visible
  referitori la animatie – :animated

vizand formularele Web – :input :text
      :password :radio :submit

   desemnand cu anumit continut
         :contains (...)
jQuery

selectarea nodurilor dorite recurge la
conventiile privitoare la selectorii CSS

           $('div.info')
toate elementele <div class="info">
          $('div#adresa')
    elementul <div id="adresa">
             $('div h1')
in contextul: <div> care include <h1>
         $('div#menu > p')
             in contextul:
<div id="menu"> cu descendentii <p>
unele rezultate ale $(…) pot intoarce
     colectii de noduri, prelucrate prin:

          $('div.info').size ()
         marimea colectiei obtinute

$('div.info').each (function(div) { ... })
                  iterator

  $('div.info').html ('<em>Salut</em>')
           inserare de cod HTML
unele rezultate ale $(…) pot intoarce
     colectii de noduri, prelucrate prin:

$('img.foto').attr ('src', '/anonim.png')
           alterarea unui atribut

    $('a.menu').addClass ('vizitat')
         adaugarea unei clase CSS

     $('p:odd').css ('color: blue')
       modificare de proprietati CSS
suportul pentru transferuri asincrone – Ajax:

     $('div#stiri').load ('stiri.html');
              incarcare asincrona

  $.get (url, parametri, functie-callback);
              incarcare prin GET

 $.post (url, parametri, functie-callback);
              incarcare via POST

$.getJSON (url, parametri, functie-callback);
        preluare raspuns in format JSON
jQuery

    extinderi via plug-in-uri:


   manipularea formularelor

jquery.com/plugins/project/form
jQuery

       extinderi via plug-in-uri:


            efecte de interfata +
facilitarea interactiunii cu utilizatorul
 (e.g., slider, tabs, resize, drag & drop)

        http://ui.jquery.com/
jQuery

    extinderi via plug-in-uri:


pentru alte detalii, a se consulta
  http://plugins.jquery.com
JavaScript
resurse
 B. Bibeault, Y. Katz, jQuery in Action,
             Manning, 2008

    S. Buraga (coord.), Programarea
        in Web 2.0, Polirom, 2007

          R. Harmes, D. Diaz,
    Pro JavaScript Design Patterns,
             Apress, 2008

M. Haverbeke, Eloquent JavaScript, 2007:
     http://eloquentjavascript.net/

               S. Willinson,
    A (Re)-Introduction to JavaScript,
        ETech Conference, 2005
resurse
Mozilla Developer Center
 developer.mozilla.org

      Ajaxian
   www.ajaxian.com

    Ajax Patterns
 www.ajaxpatterns.org

        jQuery
http://docs.jquery.com
www.learningjquery.com

More Related Content

PDF
Un mini-tutorial JavaScript
PDF
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
PDF
O mică poveste despre decoratori
PDF
CLIW 2014—2015 (8/12): JavaScript în navigatorul Web
PDF
O lectie de anatomie Web. Disectia unui document HTML
PDF
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
PDF
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6
PDF
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
Un mini-tutorial JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
O mică poveste despre decoratori
CLIW 2014—2015 (8/12): JavaScript în navigatorul Web
O lectie de anatomie Web. Disectia unui document HTML
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale

Similar to Sabin Buraga — JavaScript (20)

PDF
Esență de JavaScript pentru novici
PDF
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
PDF
CLIW 2017-2018 (6/12) Limbajul de programare JavaScript. Aspecte moderne: ES6...
PDF
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
PDF
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
PPTX
0.0 particularitatile programarii с++
ODP
PDF
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în li...
PDF
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
PPT
Programare Web - PHP (o prezentare generala)
PDF
Javascript ajax tutorial
PDF
Limbajul JavaScript: o prezentare generală
PPTX
Cercul De Rich Internet Applications Variabile, Functii, Obiecte, Mosteniri
PPTX
Javascript introducere
PDF
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
PDF
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...
PDF
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
PDF
2006 intro java_v01
PPT
Prezentare USO - Web Application Integration
Esență de JavaScript pentru novici
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
CLIW 2017-2018 (6/12) Limbajul de programare JavaScript. Aspecte moderne: ES6...
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
0.0 particularitatile programarii с++
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în li...
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
Programare Web - PHP (o prezentare generala)
Javascript ajax tutorial
Limbajul JavaScript: o prezentare generală
Cercul De Rich Internet Applications Variabile, Functii, Obiecte, Mosteniri
Javascript introducere
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
2006 intro java_v01
Prezentare USO - Web Application Integration
Ad

More from Sabin Buraga (20)

PDF
Web 2020 01/12: World Wide Web – aspecte arhitecturale
PDF
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
PDF
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
PDF
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
PDF
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
PDF
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
PDF
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
PDF
Web 2020 09/12: Servicii Web. Paradigma REST
PDF
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
PDF
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
PDF
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
PDF
STAW 01/12: Arhitectura aplicaţiilor Web
PDF
STAW 04/12: Programare Web: Node.js
PDF
STAW 05/12: Arhitectura navigatorului Web
PDF
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
PDF
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
PDF
STAW 08/12: Programare Web. Suita de tehnologii HTML5
PDF
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
PDF
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
PDF
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 04/12: Programare Web: Node.js
STAW 05/12: Arhitectura navigatorului Web
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
Ad

Sabin Buraga — JavaScript

  • 1. JavaScript Dr. Sabin Buraga www.purl.org/net/busaco @busaco
  • 2. “Cu cat cunosti mai bine, cu atat iubesti mai mult.” Leonardo da Vinci
  • 3. inventat de Brendan Eich (1995)
  • 6. adaptat de Microsoft: JScript (1996)
  • 7. standardizat in 1997 de ECMA European Computer Manufacturers Association www.ecma-international.org
  • 8. limbaj de tip script (interpretat)
  • 9. limbaj de tip script (interpretat) destinat sa manipuleze, sa automatizeze si sa integreze facilitatile oferite de un anumit sistem
  • 10. limbaj de tip script (interpretat) nu necesita intrari/iesiri in mod implicit
  • 11. Cum putem executa programele JavaScript?
  • 12. mediu de executie (host-environment): navigator Web “injectarea” de cod JavaScript in documentele (X)HTML via <script>
  • 13. mediu de executie (host-environment): platforma de dezvoltare a aplicatiilor e.g., Adobe Flex/AIR
  • 14. mediu de executie (host-environment): aplicatie de sine-statatoare Adobe Creative Suite, UltraEdit etc.
  • 15. mediu de executie (host-environment): procesor (engine) independent e.g., Yahoo! Widget Engine
  • 16. mediu de executie (host-environment): componente ale sistemului de operare Dashboard – Mac OS X Sidebar – Windows Vista/7
  • 17. cuvinte rezervate: break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof
  • 18. alte cuvinte rezervate: abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public
  • 19. tipuri de date: Number dubla precizie, stocare pe 64 biti String secvente de caractere Unicode, 16 biti Boolean secvente ce se pot evalua ca true/false Object Function, Array, Date, RegExp Null semnifica “nici o valoare” Undefined “nici o valoare asignata inca”
  • 20. “valoarea” NaN – “not a number” parseInt ("Salut")NaN isNaN (NaN + 33)true
  • 21. valori speciale: Infinity –Infinity
  • 22. un caracter reprezinta un sir de lungime 1 sirurile sunt obiecte "Salut".length5
  • 23. valorile 0, "", NaN, null, undefined sunt interpretate ca fiind false
  • 24. variabile sunt declarate cu var var marime; var numeAnimal = "Tux";
  • 25. variabilele declarate fara valori asignate, se considera undefined
  • 26. daca nu se foloseste var, atunci variabila este considerata globala de evitat asa ceva!
  • 27. conversia tipurilor se face “din zbor” "3" + 4 + 5345 3 + 4 + "5"75
  • 28. pentru a afla tipul unei expresii, se foloseste typeof typeof "Tux"string
  • 29. instructiuni de control testare: if ... else, switch
  • 30. instructiuni de control ciclare: while, do ... while, for
  • 31. instructiuni de control exceptii: try ... catch ... finally emiterea unei exceptii: throw
  • 32. obiecte perechi nume—valoare tabele de dispersie (hash) in C/C++ tablouri asociative in Perl, PHP, Ruby HashMaps in Java
  • 33. obiecte perechi nume—valoare numele este desemnat de un sir de caractere valoarea poate fi de orice tip
  • 34. obiecte colectii de proprietati, avand mai multe atribute proprietatile pot contine alte obiecte, valori primitive sau metode
  • 35. obiecte in JavaScript, se predefinesc obiectele Global Object Function Array String Boolean Number Math Date
  • 36. obiecte create prin intermediul lui new var obiect = new Object(); var obiect = {}; // echivalent cu linia anterioara
  • 37. obiecte accesarea proprietatilor obiect.nume = "Tux"; var nume = obiect.nume;
  • 38. obiecte accesarea proprietatilor obiect.nume = "Tux"; var nume = obiect.nume; echivalent: obiect["nume"] = "Tux"; var nume = obiect["nume"];
  • 39. obiecte declarare + asociere de valori var pingu = { nume: "Tux", proprietati: { culoare: "oranj", marime: 17 } }
  • 40. tablouri sunt tipuri speciale de obiecte proprietatile sunt numere, nu siruri de caractere
  • 41. tablouri var zoo = new Array (); zoo[0] = "pinguin"; zoo[1] = "omida"; zoo[2] = "urs"; zoo.length3
  • 42. tablouri var zoo = new Array (); zoo[0] = "pinguin"; zoo[1] = "omida"; zoo[2] = "urs"; zoo.length3 notatie alternativa: var zoo = ["pinguin", "omida", "urs"];
  • 43. tablouri iterari: for (var iter = 0; iter < zoo.length; iter++) { // de prelucrat zoo[iter] } for (var iter = 0, lung = zoo.length; iter < lung; iter++) { // varianta mai buna // de prelucrat zoo[iter] de ce? }
  • 44. tablouri elementele pot apartine unor tipuri de date eterogene var zoo = [16, "musca", true, "gaga"];
  • 45. functii obiecte definite prin function function transformaPixeliInPuncte (px) { var puncte = px * 300; return puncte; }
  • 46. functii argumentele primite de o functie se acceseaza via tabloul arguments
  • 47. functii pot fi specificate functii anonime expresii lambda
  • 48. functii pot fi specificate functii anonime expresii lambda in acest sens, JavaScript este un limbaj functional
  • 49. var media = function () { // calculul mediei var suma = 0; for (var iter = 0, lung = arguments.length; iter < lung; iter++) { suma += arguments[iter]; } return suma / arguments.length; }
  • 51. de la functii la clase: 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; }; }
  • 52. instantierea unui obiect: var tux = new Animal ("Tux", 17);
  • 53. operatorul new creaza un nou obiect vid si apeleaza functia specificata cu this setat pe acest obiect
  • 54. aceste functii se numesc constructori, trebuie apelate via new si, prin conventie, au numele scris cu litera mare
  • 55. structura unei clase poate fi extinsa ulterior, folosind proprietatea prototype
  • 56. 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; }
  • 57. pentru a cunoaste tipul unui obiect – pe baza constructorului si a ierarhiei de prototipuri – se foloseste operatorul instanceof
  • 58. var marimi = [17, 20, 7, 14]; marimi instanceof Arraytrue marimi instanceof Objecttrue marimi instanceof Stringfalse
  • 59. extinderea claselor adaugarea unei metode se realizeaza via prototype
  • 60. Animal.prototype.oferaNumeMare = function () { return this.nume.toUpperCase (); } tux.oferaNumeMare ()"TUX"
  • 61. in JavaScript, totul e considerat ca fiind obiect – chiar si functiile
  • 62. orice obiect e intotdeauna mutabil (poate fi alterat oricind)
  • 63. operatorul . este echivalent cu de-referentierea: obiect.prop === obiect["prop"]
  • 64. functiile ascund orice este definit in interiorul lor
  • 65. accesorul this este relativ la contextul executiei, nu al declararii
  • 66. rularea in browser programele JavaScript au acces la diverse obiecte oferite de navigatorul Web
  • 67. rularea in browser de pilda, poate fi accesat obiectul global window <script type="application/javascript"> var nav = window.navigator.userAgent; // date privitoare la browser </script>
  • 68. graceful degradation & progresive enhancement conceperea “stratificata” a aplicatiilor JavaScript
  • 69. graceful degradation & progresive enhancement initial: interactiune minimala, fara JavaScript adaugarea progresiva a facilitatilor, in functie de context
  • 70. graceful degradation & progresive enhancement inaintea folosirii oricarei tehnici dorite, de testat suportul oferit de navigator: JavaScript, cookie-uri, clase/metode DOM, Ajax,…
  • 71. JSON – JavaScript Object Notation format compact pentru interschimb de date intre aplicatii
  • 72. JSON – JavaScript Object Notation folosit la serializarea datelor in contextul Web uzual, transfer (a)sincron de date intre servicii Web si aplicatii (clienti)
  • 73. JSON – JavaScript Object Notation defineste datele in termeni de obiecte & literali json.org
  • 74. { 'nume' : 'Tux', 'stoc' : 33, 'gen' : ['candid', 'furios', 'vesel'] } datele pot fi evaluate direct in JavaScript
  • 75. instrumente medii de dezvoltare Aptana Studio depanare Firebug (Lite) Visual Studio Developer 2010
  • 76. instrumente testare (inginerie software) JSLint, JsUnit, jsTrace, Selenium
  • 77. instrumente alte extensii/utilitare folositoare GreaseMonkey, Ubiquity, Y! Slow SpiderMonkey Rhino JavaScript Shell
  • 78. biblioteci Dojo: dojotoolkit.org jQuery: jquery.com Prototype: prototypejs.org Rico: openrico.org Script.aculo.us: script.aculo.us YUI: developer.yahoo.net/yui/ …si multe altele
  • 79. jQuery scop principal: manipularea documentului HTML pe baza selectorilor CSS – nivelul 3 ofera un API concis, usor de folosit, disponibil open source http://jquery.com/ http://visualjquery.com/
  • 80. jQuery focalizarea asupra interactiunii dintre codul JavaScript si constructiile (X)HTML
  • 81. jQuery aproape orice operatie urmeaza regula: “gaseste ceva” + “executa ceva cu ceea ce-ai gasit”
  • 82. jQuery accesul la nodurile documentului HTML se realizeaza via functia jQuery() notatie prescurtata: $()
  • 83. // liniile de tabel de pe pozitii pare vor fi redate // via proprietatile CSS din clasa ‘fundal-gri’ $("table tr:nth-child(even)").addClass("fundal-gri"); obiect selector metoda jQuery CSS (functionalitate)
  • 84. jQuery selectarea nodurilor dorite recurge la conventiile privitoare la selectorii CSS http://docs.jquery.com/Selectors
  • 85. jQuery selectori “magici”: privitori la pozitie – :first :last vizibilitate – :hidden :visible referitori la animatie – :animated vizand formularele Web – :input :text :password :radio :submit desemnand cu anumit continut :contains (...)
  • 86. jQuery selectarea nodurilor dorite recurge la conventiile privitoare la selectorii CSS $('div.info') toate elementele <div class="info"> $('div#adresa') elementul <div id="adresa"> $('div h1') in contextul: <div> care include <h1> $('div#menu > p') in contextul: <div id="menu"> cu descendentii <p>
  • 87. unele rezultate ale $(…) pot intoarce colectii de noduri, prelucrate prin: $('div.info').size () marimea colectiei obtinute $('div.info').each (function(div) { ... }) iterator $('div.info').html ('<em>Salut</em>') inserare de cod HTML
  • 88. unele rezultate ale $(…) pot intoarce colectii de noduri, prelucrate prin: $('img.foto').attr ('src', '/anonim.png') alterarea unui atribut $('a.menu').addClass ('vizitat') adaugarea unei clase CSS $('p:odd').css ('color: blue') modificare de proprietati CSS
  • 89. suportul pentru transferuri asincrone – Ajax: $('div#stiri').load ('stiri.html'); incarcare asincrona $.get (url, parametri, functie-callback); incarcare prin GET $.post (url, parametri, functie-callback); incarcare via POST $.getJSON (url, parametri, functie-callback); preluare raspuns in format JSON
  • 90. jQuery extinderi via plug-in-uri: manipularea formularelor jquery.com/plugins/project/form
  • 91. jQuery extinderi via plug-in-uri: efecte de interfata + facilitarea interactiunii cu utilizatorul (e.g., slider, tabs, resize, drag & drop) http://ui.jquery.com/
  • 92. jQuery extinderi via plug-in-uri: pentru alte detalii, a se consulta http://plugins.jquery.com
  • 94. resurse B. Bibeault, Y. Katz, jQuery in Action, Manning, 2008 S. Buraga (coord.), Programarea in Web 2.0, Polirom, 2007 R. Harmes, D. Diaz, Pro JavaScript Design Patterns, Apress, 2008 M. Haverbeke, Eloquent JavaScript, 2007: http://eloquentjavascript.net/ S. Willinson, A (Re)-Introduction to JavaScript, ETech Conference, 2005
  • 95. resurse Mozilla Developer Center developer.mozilla.org Ajaxian www.ajaxian.com Ajax Patterns www.ajaxpatterns.org jQuery http://docs.jquery.com www.learningjquery.com