SlideShare uma empresa Scribd logo
1 de 152
Baixar para ler offline
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Full-Stack Web Development
programare Web: JavaScript
Dr. Sabin Corneliu Buraga – profs.info.uaic.ro/~busaco/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
“There are only two kinds of languages: the ones
people complain about and the ones nobody uses.”
Bjarne Stroustrup
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Inventat de Brendan Eich (1995)
denumit inițial Mocha, apoi LiveScript
inspirat de limbajele Java, Scheme (un dialect Lisp) și Self
oferit în premieră de browser-ul Netscape Navigator
www.w3.org/community/webed/wiki/A_Short_History_of_JavaScript
auth0.com/blog/a-brief-history-of-javascript/
medium.com/@benastontweet/lesson-1a-the-history-of-javascript-8c1ce3bffb17
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Scop
to turn the Web into
a full-blown application platform
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Prejudecată
development for the Web is not “serious”
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Impediment
inclusion of language design elements unfamiliar
to most developers
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Realitate
JavaScript has become the de-facto
standard programming language of the Web
popularizat de Douglas Crockford:
www.crockford.com/javascript/
www.youtube.com/playlist?list=PL62E185BB8577B63D
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Standardizat în 1997 de ECMA
European Computer Manufacturers Association
ECMAScript
ECMA-262
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
ECMAScript
versiunea standardizată în vigoare:
ECMAScript 2019 (iunie 2019)
www.ecma-international.org/publications/standards/Ecma-262.htm
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
ECMAScript
versiuni anterioare importante:
ECMAScript 5.1 (2011)
ecma-international.org/ecma-262/5.1/
es5.github.io/
ECMAScript 2015 – ES6 (2015)
git.io/es6features
referința de bază: developer.mozilla.org/JavaScript
acest curs
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Limbaj de tip script (interpretat)
destinat să manipuleze, să automatizeze
și să integreze funcționalitățile
oferite de un anumit sistem
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Limbaj de tip script (interpretat)
nu necesită intrări/ieșiri în mod implicit
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Adoptă diverse paradigme de programare
imperativă
à la C
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Adoptă diverse paradigme de programare
funcțională
λ calculfuncții anonime, închideri (closures),…
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Adoptă diverse paradigme de programare
pseudo-obiectuală
via prototipuri
(obiectele moștenesc alte obiecte, nu clase)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Adoptă diverse paradigme de programare
dinamică
variabilele își pot schimba tipul
pe parcursul rulării programului
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Cum putem executa programele JavaScript?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Mediu de execuție (host-environment)
navigator Web
permite rularea de aplicații Web la nivelul unei platforme
(un sistem de operare)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Mediu de execuție (host-environment)
navigator Web
permite rularea de aplicații Web la nivelul unei platforme
(un sistem de operare)
inclusiv pe diverse dispozitive – e.g., Android, iOS,
Fire OS (Kindle Fire), Universal Windows Platform,… –,
console de jocuri, smart TV-uri și altele
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Mediu de execuție (host-environment)
navigator Web
„injectarea” de cod JavaScript
în documentele HTML via elementul <script>
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Mediu de execuție (host-environment)
navigator Web
„injectarea” de cod JavaScript
în documentele HTML via elementul <script>
cod local/extern referit printr-un URL
vs. cod inclus direct în pagina Web
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Mediu de execuție (host-environment)
independent de navigatorul Web
platforme de dezvoltare de aplicații distribuite: Node.js
servere Web – nginScript în cadrul Nginx
servere de baze de date – e.g., Apache CouchDB
componente ale sistemului de operare
aplicații de sine-stătătoare – e.g., Adobe Creative Suite
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Cuvinte rezervate:
break else new var case finally return void catch
for switch while continue function this with default
if throw delete in try do instanceof typeof
caracteristici: sintaxa
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Alte cuvinte rezervate:
abstract enum int short boolean export interface
static byte extends long super char final native
synchronized class float package throws const
goto private transient debugger implements
protected volatile double import public
caracteristici: sintaxa
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Boolean
expresii ce se pot evalua ca fiind true/false
caracteristici: tipuri de date
developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Boolean
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Object
aproape totul e considerat ca fiind obiect,
inclusiv funcțiile
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Null
semnifică „nicio valoare”
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Undefined
are semnificația „nicio valoare asignată încă”
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Nu există valori întregi
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
„Valoarea” NaN (“not a number”)
parseInt ("Salut")  NaN
isNaN (NaN + 3)  true
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Valori speciale:
Infinity
–Infinity
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Operații avansate cu numere se pot realiza
via obiectul predefinit Math
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Operații avansate cu numere se pot realiza
via obiectul predefinit Math
constante predefinite:
Math.PI
Math.E
Math.LN10
etc.
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Operații avansate cu numere se pot realiza
via obiectul predefinit Math
metode:
abs(x) ceil(x) cos(x) exp(x) floor(x) log(x) max(x, …) min(x, …)
pow(x, y) random() round(x) sign(x) sin(x) sqrt(x) trunc(x)
etc.
caracteristici: tipuri de date
developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Math
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Un caracter reprezintă un șir de lungime 1
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șirurile sunt obiecte
"Salut".length  5
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Metode utile
pentru procesarea șirurilor de caractere:
charAt(pos) charCodeAt(pos) concat(s1, ..) indexOf(s1, start)
match(regexp) replace(search, replace)
slice(start, end) split(separator, limit)
search(regexp) substring(start, end)
toLowerCase() toUpperCase()
etc.
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Valorile 0, "", NaN, null, undefined
sunt interpretate ca fiind false
!!234  true
caracteristici: tipuri de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Variabilele se declară cu var
var mărime;
var numeAnimal = "Tux";
variabilele declarate fără valori asignate,
se consideră undefined
caracteristici: variabile
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Dacă nu se folosește var,
atunci variabila este considerată globală
de evitat așa ceva!
caracteristici: variabile
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Valorile sunt „legate” tardiv la variabile
(late binding)
caracteristici: variabile
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Similari celor din C:
pentru numere: + – * / %
testare: == === != !== ?:
asignare: += –= *= /= %=
incrementare și decrementare: ++ – –
logici: ! && ||
concatenare de șiruri: "Java" + "Script"  "JavaScript"
caracteristici: operatori
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Comparații: < > <= >= (numere și șiruri)
egalitatea valorilor se testează cu == și !=
1 == true  true
caracteristici: operatori
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Comparații: < > <= >= (numere și șiruri)
egalitatea valorilor se testează cu == și !=
1 == true  true
a se folosi: 1 === true  false
caracteristici: operatori
inhibă conversia
tipurilor de date
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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'
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Operatorii logici && și ||
var nume = unNume || "Implicit";
caracteristici: operatori
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Operatorul ternar de test ? :
var prezență = (studenți > 33) ? "Prea mulți" : "Cam puțini…";
caracteristici: operatori
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Testare: if … else, switch
pentru 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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Ciclare: while, do … while, for
do {
var nume = preiaNume ();
} while (nume != "");
for (var contor = 0; contor < 33; contor++) {
// de 33 de ori…
}
caracteristici: control
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Excepții: try … catch … finally
try {
// Linii "periculoase" ce pot cauza excepții
} catch (eroare) {
// Linii rulate la apariția unei/unor excepții
} finally {
// Linii care se vor executa la final
}
caracteristici: control
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Excepții: try … catch … finally
try {
// Linii "periculoase" ce pot cauza excepții
} catch (eroare) {
// Linii rulate la apariția unei/unor excepții
} finally {
// Linii care se vor executa la final
}
emiterea unei excepții: throw
throw new Error ("O eroare de-a noastră...");
caracteristici: control
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Perechi nume—valoare
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Perechi nume—valoare
tabele de dispersie (hash) în C/C++
tablouri asociative în Perl, PHP sau Ruby
HashMaps în Java
“everything except primitive values is an object”
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Perechi nume—valoare
numele este desemnat de un șir de caractere
(i.e., expresie de tip String)
valoarea poate fi de orice tip,
inclusiv null sau undefined
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Obiect  colecție de proprietăți,
având mai multe atribute
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Obiect  colecție de proprietăți,
având mai multe atribute
proprietățile pot conține alte obiecte,
valori primitive sau metode
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Obiecte predefinite – exemplificări:
Global Object
Function Array
String RegExp
Boolean Number
Math Date
caracteristici: obiecte
de studiat developer.mozilla.org/JavaScript/Reference/Global_Objects
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Obiecte fundamentale vizând gestionarea erorilor
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Create prin intermediul operatorului new:
var ob = new Object();
var ob = { }; // echivalent cu linia anterioară
caracteristici: obiecte
se preferă această sintaxă
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Accesarea proprietăților – operatorul .
ob.nume = "Tux";
var nume = ob.nume;
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Accesarea proprietăților – operatorul .
ob.nume = "Tux";
var nume = ob.nume;
echivalent cu:
ob["nume"] = "Tux";
var nume = ob["nume"];
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Declarare + asignare:
var pinguin = {
nume: "Tux",
proprietati: {
culoare: "verde",
marime: 17
}
}
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Declarare + asignare:
var pinguin = {
nume: "Tux",
proprietati: {
culoare: "verde",
marime: 17
}
}
caracteristici: obiecte
accesare:
pinguin.proprietati.marime  17
pinguin["proprietati"]["culoare"]  "verde"
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
var facultyContactInfo = {
// numele proprietăților sunt încadrate de ghilimele
"official-phone" : '+40232201090',
city : 'Iași', // dacă numele e identificator valid, ghilimelele pot fi omise
'street' : 'General Berthelot',
'number' : 16, // pot fi folosite orice tipuri de date primitive
"class" : "new", // cuvintele rezervate se plasează între ghilimele
coord : { // obiectele pot conține alte obiecte (nested objects)
'geo' : { 'x': 47.176591, 'y': 27.575930 }
},
age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor
};
console.log (facultyContactInfo.coord["geo"].y); // obținem 27.57593
adaptare după Sergiu Dumitriu (2012)
redare în consola
mediului de rulare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Eliminarea proprietăților se realizează cu delete
var pinguin = { 'nume': 'Tux', 'marime': 17 };
pinguin.nume = undefined; // nu șterge proprietatea
delete pinguin.marime; // eliminare efectivă
for (var prop in pinguin) {
console.log (prop + "=" + pinguin[prop]);
}
// va apărea doar "nume=undefined"
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Tipuri speciale de obiecte
proprietățile (cheile) sunt numere,
nu șiruri de caractere
caracteristici: tablouri
developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Array
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Se poate utiliza sintaxa privitoare la obiecte:
var animale = new Array ();
animale[0] = "pinguin";
animale[1] = "omida";
animale[2] = "pterodactil";
animale.length  3
caracteristici: tablouri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Se poate utiliza sintaxa privitoare la obiecte:
var animale = new Array ();
animale[0] = "pinguin";
animale[1] = "omida";
animale[2] = "pterodactil";
animale.length  3
notație alternativă – preferată:
var animale = ["pinguin", "omida", "pterodactil"];
caracteristici: tablouri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Elementele pot aparține
unor tipuri de date eterogene
var animale = [33, "vierme", false, "gaga"];
caracteristici: tablouri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Tablourile pot avea „găuri” (sparse arrays):
var animale = ["pinguin", "omida", "pterodactil"];
animale[33] = "om";
animale.length  34
typeof animale[13]  undefined
caracteristici: tablouri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
var vector = [ ];
vector[0] = "zero";
vector[new Date().getTime()] = "now";
vector[3.14] = "pi";
vector[Math.PI] = "un pi mai precis";
for (var elem in vector) {
console.log ("vector[" + elem + "] = " + vector[elem] +
", typeof( " + elem +") == " + typeof (elem));
}
caracteristici: tablouri – exemplu
adaptare după John Kugelman (2009)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
rezultatul obținut în urma rulării programului JavaScript
via aplicația JS Bin – jsbin.com
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Interări:
for (var it = 0; it < animale.length; it++) {
// de prelucrat animale[it]
}
caracteristici: tablouri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Interări:
for (var it = 0; it < animale.length; it++) {
// de prelucrat animale[it]
}
// variantă mai bună
for (var it = 0, lung = animale.length; it < lung; it++) {
// de prelucrat animale[it]
}
caracteristici: tablouri
de ce?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Metode utile:
toString() concat(item, ..) join(sep) fill(val, start, end)
keys() values()
pop() push(item,…) map(func, arg) reduce(func, val)
reverse() shift() unshift(item,...) slice(begin, end)
filter(func, arg) find(func, arg) every(func, arg)
sort(func) splice(start, delCount, item,...)
caracteristici: tablouri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Definite via function
function transformaPixeliInPuncte (px) {
var puncte = px * 300;
return puncte;
}
caracteristici: funcții
developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Function
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Dacă nu este întors nimic în mod explicit,
valoarea de retur se consideră undefined
caracteristici: funcții
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Parametrii de intrare pot lipsi,
fiind considerați undefined
caracteristici: funcții
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Pot fi transmise mai multe argumente,
cele în surplus fiind ignorate
transformaPixeliInPuncte (10, 7)  3000
caracteristici: funcții
alte detalii în eloquentjavascript.net/03_functions.html
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Funcțiile sunt tot obiecte
astfel, pot fi specificate funcții anonime
caracteristici: funcții
expresii
lambda
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Funcțiile sunt tot obiecte
astfel, pot fi specificate funcții anonime
în acest sens, JavaScript este un limbaj funcțional
caracteristici: funcții
expresii
lambda
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
var media = function () { // calculul mediei a N numere
var suma = 0;
for (var iter = 0,
lung = arguments.length;
iter < lung; iter++) {
suma += arguments[iter];
}
return suma / arguments.length;
};
caracteristici: funcții
variabilele declarate
în funcție nu vor fi
accesibile din exterior,
fiind „închise”

funcție closure
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
pentru aprofundarea aspectelor
vizând programarea funcțională în JavaScript, a se studia
github.com/stoeffel/awesome-fp-js
console.log ( media (9, 10, 7, 8, 7) )  8.2
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
precizați ce efect vor avea liniile de cod următoare:
console.log ( typeof (media) );
console.log ( media() );
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
variabila media este de tip function
apelul media() întoarce valoarea NaN
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
// definirea unei funcții recursive pentru inversarea unui șir de caractere
// (se observă și utilizarea Unicode în cadrul programului)
function inverseazăȘir (șir) {
return șir === '' ? '' : inverseazăȘir (șir.substr (1)) + șir.charAt (0);
}
// testare (folosind diverse caractere Unicode)
console.log (inverseazăȘir ("☞Iñtërnâțiônàlîzætiøn☜"));
caracteristici: funcții recursive
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
(în loc de) pauză
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Detalii despre trăsăturile
vizând programarea orientată-obiect?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
function Animal (nume, marime) {
this.nume = nume; // date-membre
this.marime = marime;
this.oferaNume = function () { // metodă
return this.nume;
};
this.oferaMarime = function () { // metodă
return this.marime;
};
}
caracteristici: obiecte
creational pattern
pseudo-clase
(utilizarea
constructorilor)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Față de alte limbaje de programare,
obiectul curent – referit cu this –
este asignat ca fiind obiectul global
de exemplu, în browser, reprezintă fereastra curentă
în care este redat documentul: this  window
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Metodele pot fi declarate și în exteriorul constructorului
function oferaNumeAnimal () {
return this.nume;
}
function Animal (nume, marime) {
this.nume = nume;
this.marime = marime;
this.oferaNume = oferaNumeAnimal; // referă funcția de mai sus
}
caracteristici: obiecte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
caracteristici: proprietăți
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Fiecare proprietate are asociate atributele:
[[Value]] – desemnează valoarea curentă a proprietății
[[Writable]] – indică dacă o proprietate
poate să-și modifice valoarea
[[Get]] și [[Set]] – funcții opționale pentru a oferi/stabili
valoarea unei proprietăți de tip accessor
[[Enumerable]] – specifică dacă numele proprietății
va fi disponibil într-o buclă for-in
[[Configurable]] – indică dacă proprietatea
poate fi ștearsă ori redefinită
caracteristici: proprietăți
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
proprietăți interne importante (folosite de procesorul
ECMAScript, dar inaccesibile la nivel de program)
[[Prototype]] definește ierarhiilor de obiecte
[[Get]] [[Put]] [[CanPut]] pentru accesarea valorilor
[[HasProperty]]
[[DefineOwnProperty]]
[[GetProperty]]
[[GetOwnProperty]]
[[Delete]]
manipularea proprietăților
[[Extensible]] indică obiectele ce pot fi extinse
[[Construct]]
[[Call]]
asociate obiectelor executabile
(funcții)
[[Code]]
[[Scope]]
desemnează codul și contextul
unei obiect de tip funcție
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
// crearea unei proprietăți simple stocând date
// (writable, enumerable, configurabile)
obiect = { };
obiect.numeProprietate = 33;
// crearea via API-ul intern a unei proprietăți stocând date
Object.defineProperty (obiect, "numeProprietate", {
value: 33, writable: true, enumerable: true, configurable: true }
)
caracteristici: proprietăți
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
proprietățile interne ale obiectelor definite
www.objectplayground.com
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Deoarece orice obiect deține în mod implicit
proprietatea prototype,
structura unei „clase” poate fi extinsă ulterior
un prototip e o proprietate oferind o legătură ascunsă
către obiectul de care aparține
caracteristici: prototipuri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
caracteristici: prototipuri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Dacă se încearcă accesarea unui element inexistent
în cadrul unui obiect dat,
se va verifica lanțul de prototipuri (prototype chain)
caracteristici: prototipuri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
function Animal (nume, marime) { // definiție inițială
this.nume = nume;
this.marime = marime;
}
// instanțiem obiecte de tip Animal
var tux = new Animal ("Tux", 17);
var pax = new Animal ("Pax", 15);
// pe baza prototipurilor, definim noi metode
// disponibile pentru toate obiectele din clasă
Animal.prototype.oferaNume = function () {
return this.nume;
};
Animal.prototype.oferaMarime = function () {
return this.marime;
};
console.log (tux.oferaMarime ());
console.log (pax.oferaMarime ());
aceste definiții
sunt disponibile
în întreg
programul
(hoisting)
developer.mozilla.org/docs/Glossary/Hoisting
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
caracteristici: obiecte
trasarea pas-cu-pas a execuției programului, cu inspectarea valorilor
variabilelor, via www.pythontutor.com/visualize.html#mode=edit
// instanțierea unui obiect
var 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 ());
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
caracteristici: obiecte
trasarea pas-cu-pas a execuției programului, cu inspectarea valorilor
variabilelor, via www.pythontutor.com/visualize.html#mode=edit
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Pentru a cunoaște tipul unui obiect
(pe baza constructorului și a ierarhiei de prototipuri)
se folosește operatorul instanceof
caracteristici: prototipuri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
var marimi = [17, 20, 7, 14];
marimi instanceof Array  true
marimi instanceof Object  true
marimi instanceof String  false
var tux = new Animal ("Tux", 17);
tux instanceof Object  true
tux instanceof Array  false
caracteristici: prototipuri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Adăugarea unei metode se realizează via prototype
Animal.prototype.oferaNumeMare = function () {
return this.nume.toUpperCase ();
};
tux.oferaNumeMare ()  "TUX"
caracteristici: extinderea claselor
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Pot fi extinse și obiectele predefinite:
// adăugăm o metodă obiectului String
String.prototype.inversează = function () {
var inv = '';
for (var iter = this.length - 1; iter >= 0; iter--) { // inversăm șirul…
inv += this[iter];
}
return inv;
};
"Web".inversează()  "beW"
caracteristici: extinderea claselor
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
var tux = new Animal ("Tux", 17);
tux.toString ()  [object Object]
Animal.prototype.toString = function () {
return '<animal>' + this.oferaNume () + '</animal>';
};
tux.toString ()  "<animal>Tux</animal>"
caracteristici: extinderea claselor
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Atenție la pericole!
de exemplu, comportamentul diferit al construcției
for (var proprietate in obiect)
caracteristici: extinderea claselor
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
function Animal (nume, marime) { // definiție inițială
this.nume = nume;
this.marime = marime;
this.oferaNume = function() { return this.nume; }
}
var tux = new Animal ("Tux", 17);
var jox = tux;
var pax = new Animal ("Pax", 15);
console.log ('Numele lui Tux: ' + tux.oferaNume ()); // 'Tux'
// dorim să suprascriem metoda deja existentă în definiția 'clasei'
Animal.prototype.oferaNume = function () { return this.nume + ' ' + this.marime; };
// suprascriem metoda pentru un obiect particular
pax.oferaNume = function () { return this.nume + ' ' + this.marime; };
console.log ('Numele lui Tux: ' + tux.oferaNume ()); // 'Tux'
console.log ('Numele lui Jox: ' + jox.oferaNume ()); // 'Tux'
console.log ('Numele lui Pax: ' + pax.oferaNume ()); // 'Pax 15'
discuție
???
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
function Animal (nume, marime) { // definiție inițială
this.nume = nume;
this.marime = marime;
this.oferaNume = function() { return this.nume; }
}
var tux = new Animal ("Tux", 17);
var jox = tux;
var pax = new Animal ("Pax", 15);
console.log ('Numele lui Tux: ' + tux.oferaNume ()); // 'Tux'
// dorim să suprascriem metoda deja existentă în definiția 'clasei'
Animal.prototype.oferaNume = function () { return this.nume + ' ' + this.marime; };
// suprascriem metoda pentru un obiect particular
pax.oferaNume = function () { return this.nume + ' ' + this.marime; };
console.log ('Numele lui Tux: ' + tux.oferaNume ()); // 'Tux'
console.log ('Numele lui Jox: ' + jox.oferaNume ()); // 'Tux'
console.log ('Numele lui Pax: ' + pax.oferaNume ()); // 'Pax 15'
dacă numele metodei deja există pentru o instanță dată,
nu se mai caută în lanțul de prototipuri
discuție
???
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Șablon general:
ClasaDeBază = function () { /* … */ };
SubClasa = function () { /* … */ };
SubClasa.prototype = new ClasaDeBază ();
caracteristici: extinderea claselor
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Deoarece o funcție reprezintă un obiect, poate fi:
stocată ca valoare (asociată unei variabile)
pasată ca argument al unei alte funcții
întoarsă de o funcție – fiind argument pentru return
caracteristici: funcții de nivel înalt
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Dorim să calculăm greutatea unui animal
folosim formula greutate = marime * 33.25
varianta clasică:
var marimi = [17, 20, 7, 14];
var greutati = [ ];
for (var contor = 0; contor < marimi.length; contor++) {
greutati[contor] = marimi[contor] * 33.25;
}
caracteristici: funcții de nivel înalt
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Varianta îmbunătățită – mai generală:
function genereazaTablouGreutati (tablou, calcul) {
var rezultat = [ ];
for (var contor = 0; contor < tablou.length; contor++) {
rezultat[contor] = calcul (tablou[contor]);
}
return rezultat;
}
function calculGreutate (marime) {
return marime * 33.25;
}
var greutati = genereazaTablouGreutati (marimi, calculGreutate);
referim funcția
ce va realiza calculul
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Varianta îmbunătățită – mai generală:
function genereazaTablouGreutati (tablou, calcul) {
var rezultat = [ ];
for (var contor = 0; contor < tablou.length; contor++) {
rezultat[contor] = calcul (tablou[contor]);
}
return rezultat;
}
function calculGreutate (marime) {
return marime * 33.25;
}
var greutati = genereazaTablouGreutati (marimi, calculGreutate);
calcul e variabilă
de tip funcție
fiind funcție,
se poate apela
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
a se consulta și
exemplele din arhiva
asociată acestui curs
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Nu trebuie afectat spațiul de nume global,
păstrându-se codul-sursă la nivel privat
caracteristici: încapsulare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Codul poate fi complet încapsulat
via funcții anonime
care „păstrează” construcțiile la nivel privat
caracteristici: încapsulare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Declararea imbricată – ca expresii de tip funcție –
a funcțiilor anonime are denumirea closures
developer.mozilla.org/JavaScript/Guide/Closures
caracteristici: closures
închideri
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Ș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
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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'
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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
modularizare a codului (module pattern)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
var makeCounter = function () {
var contorPrivat = 0; // un contor de valori (inițial, zero)
function changeBy (val) { // funcție privată
contorPrivat += val; // ce modifică valoarea contorului
}
return { // funcții publice (expuse)
increment: function() {
changeBy (1);
},
decrement: function() {
changeBy (-1);
},
value: function() {
return contorPrivat;
}
};
};
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
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 */
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Reducerea arității unei funcții
“a technique of transforming a multi-argument function
in such a way that it can be called as a chain of functions,
each with a single argument” (G. Kay Lee)
slides.com/gsklee/functional-programming-in-5-minutes
caracteristici: currying
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
În loc de (x, y) → x + y
putem scrie x → (y → x + y)
function f(x, y) {
return x + y;
}
function g(x) {
return function (y) {
return x + y;
}
}
f(33, 74)  g(33)(74);
„lanț” de funcții, fiecare
având un singur argument
detalii în tutorialul www.sitepoint.com/currying-in-functional-javascript/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Totul în JavaScript este obiect – chiar și funcțiile
de reținut!
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Orice obiect este întotdeauna mutabil
(poate fi alterat oricând)
proprietățile și metodele sunt disponibile
oriunde în program (public scope)
de reținut!
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Nu există vizibilitate la nivel de bloc de cod
(block scope),
ci doar la nivel global ori la nivel de funcție
de reținut!
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Funcțiile ascund orice e definit în interiorul lor
de reținut!
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Operatorul “.” este echivalent
cu de-referențierea:
ob.prop === ob["prop"]
de reținut!
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Operatorul new creează obiecte aparținând
„clasei” specificate de funcția constructor
de reținut!
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Accesorul this este relativ la contextul execuției,
nu al declarării
de reținut!
Atenție la dependența
de mediul de execuție!
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Proprietatea prototype are valori
modificabile (mutable)
de reținut!
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
JavaScript Object Notation
json.org
biblioteci de procesare și alte resurse de interes:
jsonauts.github.io
json
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Format compact standardizat independent de limbaj
util pentru interschimb de date
– în termeni de obiecte și literali – între aplicații
permite declararea de structuri de date:
colecții de perechi nume—valoare
+
liste ordonate de valori
json
www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
JavaScript Object Notation
{
'nume': 'Tux',
'stoc': 33,
'model': [ 'candid', 'viteaz' ]
}
json
datele pot fi evaluate
direct în JavaScript
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Procesare via obiectul predefinit JSON
JSON.parse()
JSON.stringify()
json
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
// 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)
var sirTux = '{ "nume": "Tux", "stoc": 33, "model": [ "candid", "viteaz" ] }';
var tux;
try { // procesăm șirul pentru a genera un obiect JS via obiectul JSON
tux = JSON.parse (sirTux);
} catch (e) { console.log (e.message); /* eroare :( */ }
// redăm la consolă obiectul 'tux' generat cu JSON.parse ()
console.log (tux);
// redăm la consolă serializarea datelor JSON ca șir de caractere
console.log (JSON.stringify (tux));
escaped special
characters
Dr.SabinBuragaprofs.info.uaic.ro/~busaco
episodul viitor:
programare în JavaScript (continuare)

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptCLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
 
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHPWeb 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
 
HTML5 în XXX de minute
HTML5 în XXX de minuteHTML5 în XXX de minute
HTML5 în XXX de minute
 
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
 
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptCLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
 
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsWeb 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
 
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
 
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientCLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
 
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
 
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScriptCLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
 
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
 
O lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTMLO lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTML
 
Căutarea resurselor Web
Căutarea resurselor WebCăutarea resurselor Web
Căutarea resurselor Web
 
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în li...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în li...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în li...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #8): Programare în li...
 
HTML5? HTML5!
HTML5? HTML5!HTML5? HTML5!
HTML5? HTML5!
 
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansambluCLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
 
WADe 2017-2018 (1/12) Web Application Development: Concepts & Vision
WADe 2017-2018 (1/12) Web Application Development: Concepts & VisionWADe 2017-2018 (1/12) Web Application Development: Concepts & Vision
WADe 2017-2018 (1/12) Web Application Development: Concepts & Vision
 
CLIW 2017-2018 (4/12) Vizualizarea datelor – o privire de ansamblu
CLIW 2017-2018 (4/12) Vizualizarea datelor – o privire de ansambluCLIW 2017-2018 (4/12) Vizualizarea datelor – o privire de ansamblu
CLIW 2017-2018 (4/12) Vizualizarea datelor – o privire de ansamblu
 

Semelhante a STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale

Semelhante a STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale (20)

Un mini-tutorial JavaScript
Un mini-tutorial JavaScriptUn mini-tutorial JavaScript
Un mini-tutorial JavaScript
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.js
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
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 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
 
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
 
Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST
Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul RESTDezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST
Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST
 
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
 
Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...
Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...
Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...
 
WADe 2017-2018 (5/12) Data Modeling in RDF (Resource Description Framework)
WADe 2017-2018 (5/12) Data Modeling in RDF (Resource Description Framework)WADe 2017-2018 (5/12) Data Modeling in RDF (Resource Description Framework)
WADe 2017-2018 (5/12) Data Modeling in RDF (Resource Description Framework)
 
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
 
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
 
Dezvoltarea aplicațiilor Web (1/12): Dezvoltarea de aplicaţii Web: Concepte &...
Dezvoltarea aplicațiilor Web (1/12): Dezvoltarea de aplicaţii Web: Concepte &...Dezvoltarea aplicațiilor Web (1/12): Dezvoltarea de aplicaţii Web: Concepte &...
Dezvoltarea aplicațiilor Web (1/12): Dezvoltarea de aplicaţii Web: Concepte &...
 
Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5
 
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor Web
 
Ce înseamnă să fii dezvoltator Web
Ce înseamnă să fii dezvoltator WebCe înseamnă să fii dezvoltator Web
Ce înseamnă să fii dezvoltator Web
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
 

Mais de Sabin Buraga

Mais de Sabin Buraga (20)

Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleWeb 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturale
 
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebWeb 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
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 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
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 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
 
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma REST
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
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 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
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
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului Web
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
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 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
 
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignHCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
 

STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale