Java Script - Università degli studi di Bergamo

Università di Bergamo
Facoltà di Ingegneria
Applicazioni Internet B
Paolo Salvaneschi
B5_1 V1.14
Java Script
Il contenuto del documento è liberamente utilizzabile dagli studenti, per studio personale e per supporto a lezioni universitarie.
Ogni altro uso è riservato, e deve essere preventivamente autorizzato dall’ autore.
Sono graditi commenti o suggerimenti per il miglioramento del materiale
B5 Java Script
Paolo Salvaneschi
1
INDICE
• Introduzione
• Elementi di base
–
–
–
–
–
–
–
–
–
Inserimento nel testo HTML
Struttura lessicale
Tipi di dati
Variabili
Operatori
Istruzioni
Funzioni
Oggetti
Array
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
2
2
Introduzione
• JavaScript non è una versione semplificata
di Java
• Versioni
– JavaScript
– Jscript (Microsoft)
– Standard ECMA-262 (European Computer
Manifacturers Association) –”ECMAScript”
• Utilizzabile sia lato client che lato server o
incorporato in applicazioni
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
3
3
Introduzione
• Utilizzo di JavaScript lato client
– Linguaggio di programmazione integrato
nella pagina HTML
– Gestione eventi ed interazione locale con
l’utente
– Definizione oggetti e attributi (DOM
Document Object Model) componenti la
pagina e modificabilità da programma
– CSS
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
4
4
Introduzione
• Cosa non fa JavaScript lato client
– Non ha funzioni grafiche (salvo quelle che
servono per generare dinamicamente codice
HTML)
– Non legge e scrive files (Motivo: problemi
di sicurezza; programma trasmesso via web sul
client)
– Non supporta comunicazioni di rete (salvo
invio dati da form,…)
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
5
5
Inserimento nel testo HTML
• Inserimento nel testo HTML
• Tag <script>; inseribile più volte in HEAD o BODY
• Language opzionale
<SCRIPT language="JavaScript">
document.write("Hello World!");
</SCRIPT>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
6
6
Inserimento nel testo HTML
Nascondere gli script alle vecchie versioni di navigatori
I navigatori ignorano i tag sconosciuti.
Navigatori non abilitati JavaScript: ignorano <SCRIPT> e </SCRIPT>;
ignorano il codice incluso poiché tra tag di commento <!-- -- >
Navigatori abilitati JavaScript: interpretano lo script; ignorano il commento
(la linea che chiude il tag commento inizia per // ed è un commento in
JavaScript)
<SCRIPT>
<!-- Begin to hide script contents from old browsers.
JavaScript statements...
// End the hiding here. -->
</SCRIPT>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
7
7
Inserimento nel testo HTML
<HTML>
<HEAD>
<TITLE>Fattoriali</TITLE>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
document.write("<h2>Tavola dei fattoriali</h2>");
for(i = 1, fact = 1; i < 10; i++, fact *= i)
{document.write(i + "! = " + fact);
document.write("<br>");}
</SCRIPT>
</BODY>
</HTML>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
8
8
Inserimento nel testo HTML
• File esterno
• File di testo con estensione .js
<SCRIPT language="JavaScript" src="functions.js">
</SCRIPT>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
9
9
Inserimento nel testo HTML
<HTML>
<HEAD>
<TITLE>Fattoriali</TITLE>
</HEAD>
<BODY>
<SCRIPT language="JavaScript" src="Fatt.js">
</SCRIPT>
</BODY>
</HTML>
Fatt.js
document.write("<h2>Tavola dei fattoriali</h2>");
for(i = 1, fact = 1; i < 10; i++, fact *= i)
{document.write(i + "! = " + fact);
document.write("<br>");}
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
10
10
Inserimento nel testo HTML
• Gestore di eventi
<FORM>
<INPUT type="button" value="Chiudi" onclick="win1.close();">
</FORM>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
11
11
Inserimento nel testo HTML
• URL javascript
pseudoprotocollo javascript:
Il navigatore esegue il codice
<HTML>
non c’è stringa da visualizzare
Il navigatore esegue il codice
<HEAD>
e visualizza il valore della
<TITLE>URLJavascript</TITLE>
stringa dell’ultima istruzione
</HEAD>
<BODY>
<A href="javascript: alert('Ciao a tutti');">Saluti</A>
<BR>
<BR>
<A href="javascript: var now = new Date(); 'Data di oggi:' + now;">Data</A>
</BODY>
</HTML>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
12
12
Inserimento nel testo HTML
<HTML>
<HEAD><TITLE>URLJavascript</TITLE></HEAD>
<BODY>
<A href="javascript: alert('Ciao a tutti');">Saluti</A>
<BR>
<BR>
<A href="javascript: var now = new Date(); 'Anno corrente:' + now.getFullYear();">
Anno</A>
</BODY>
</HTML>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
13
13
Struttura lessicale
• Set caratteri UNICODE
• Case sensitive
• Ignora spazi, tab, avanzamenti riga tra
elementi del programma
• Istruzioni terminate con ;
• Commenti
//commento su unica linea
/* commento disposto su
linee diverse*/
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
14
14
Struttura lessicale
• Identificatori (nome variabile, nome
funzione, etichetta)
• Il primo carattere deve essere:
Lettera
_ (underscore)
$
• Parole riservate (if, else, false,….)
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
15
15
Tipi di dati
•
Tipi di dati
– Numeri
•
Tutti i numeri sono rappresentati in virgola mobile
a 64 bit (double)
0xff esadecimale ff
3
3.14
6.02e+23 // 6.02*1023
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
16
16
Tipi di dati
•
Tipi di dati
– Stringhe
"testo" 'testo'
All’interno delle stringhe delimitate da apici
singoli è possibile inserire apici doppi e
viceversa
OK:
<A href="javascript: alert('Ciao a tutti');">Saluti</A>
NON OK:
<A href="javascript: alert("Ciao a tutti");">Saluti</A>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
17
17
Tipi di dati
– Stringhe
"questa stringa\nha due righe"
\n -----sequenza di escape: nuova riga
equivalente a: \u000A
"π
è il rapporto tra circonf e diametro cerchio"
"\u03c0 è il rapporto tra circonf e diametro
cerchio"
\uXXXX carattere unicode di 4 esadecimali
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
18
18
Tipi di dati
•
•
Uso delle stringhe
Concatenazione
msg = "hello, " + "world";
//produce la stringa "hello, world"
•
•
Le stringhe sono indicizzate a partire da 0
Metodi per operare sulle stringhe
lunghezza_stringa_s = s.lenght
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
19
19
Tipi di dati
•
Tipi di dati
– Booleani true false
– Null
•
Una variabile che contiene null non contiene alcun
oggetto, stringa,…
– Undefined
•
B5 Java Script
B5 Java Script
Restituito quando una variabile non esiste o non
ha mai avuto assegnato alcun valore
Paolo Salvaneschi
Paolo Salvaneschi
20
20
Tipi di dati
• Tipi di dati
– Oggetto (insieme non ordinato di valori con
nome)
– Oggetto funzione (a cui è associato codice
eseguibile)
– Oggetto array (insieme ordinato di valori
numerati)
– Oggetti specializzati (classi di oggetti. Es. la
classe Date che definisce oggetti che
rappresentano date)
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
21
21
Variabili
• Tipizzazione delle variabili
• Linguaggio debolmente tipizzato
– Una variabile può contenere valori di
qualunque tipo. Il tipo non è dichiarato
i = 10;
i = "dieci";
– I tipi sono convertiti automaticamente
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
22
22
Variabili
• Dichiarazione di variabile
– Dichiarata con la parola chiave var
var sum;
– Dichiarata e inizializzata (se non inizializzata
contiene il valore undefined)
var i = 0;
– Leggere variabile non dichiarata >> errore
– Assegnare valore a variabile non dichiarata
precedentemente >> JavaScript la dichiara
implicitamente (come variabile globale - vedi…)
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
23
23
Variabili
• Ambito (Scope)
– Globale visibile in ogni punto del codice
JavaScript della pagina
– Locale
--visibile solo dalla funzione in cui è assegnata
--dichiarata (var) all’interno della funzione
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
24
24
Variabili
var scope = "globale";
function checkscope1()
{
var scope = "locale";
document.write("<B>" + scope + "</B>");
}
checkscope1();
var scope = "globale";
function checkscope2()
{
document.write("<B>" + scope + "</B>");
}
checkscope2();
var scope = "globale";
function checkscope3()
{
scope = "locale"; // N.B. Modifica la variabile globale
document.write("<B>" + scope + "</B><BR>");
}
checkscope3();
document.write("<B>" + scope + "</B>");
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
25
25
Variabili
Ho dichiarato
implicitamente
una variabile
globale
Ho dichiarato
una variabile
locale
var scope = "globale";
function checkscope3()
{
scope = "locale"; // N.B. Modifica la variabile globale
myscope1 = "esempio1 ";
var myscope2 = "esempio2 ";
document.write("<B>" + scope + "</B>");
}
checkscope3();
• Dichiarare tutte le variabili con var
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
26
26
Variabili
• Ambito (Scope)
Nessun ambito a livello di blocco
Tutte le varabili dichiarate in una funzione
restano definite in tutto il corpo della funzione
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
27
27
Variabili
• Variabili e valori relativi
• Tipi primitivi
– Numeri, booleani, null, undefined
– Occupazione di memoria predefinita
• Tipi di riferimento
– Oggetti, array, funzioni (array e funzioni sono tipi
specializzati di oggetti)
– Occupazione non predefinita
– Gestiti come “riferimento” ai valori
– Stringhe: occupazione non predefinita ma con contenuto
non modificabile – gestite come tipo riferimento
immutabile che si comporta come un tipo primitivo
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
28
28
Variabili
<H2>Tipi primitivi</H2>
<SCRIPT language="JavaScript">
var a = 3.14; //inizializza variabile
var b = a; //copiala in b
a = 4; // modifica var originale
alert(b); //la copia non è modificata
</SCRIPT>
<BR>
<H2>e tipi di riferimento</H2>
<SCRIPT language="JavaScript">
var a = [1,2,3]; //inizializza array
var b = a; //copia riferimento in b
a[0] = 99; // modifica array originale
alert(b); //il nuovo riferimento visualizza la modifica
</SCRIPT>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
29
29
Variabili
• Garbage collection
var s= "hello";
//Alloca memoria per una stringa
var u = s.toUpperCase(); //Crea una nuova stringa (s resa maiuscola)
s = u;
//Sovrascrive il riferimento
//alla stringa originale
//la stringa "hello" non è più raggiungibile
//e lo spazio in memoria viene deallocato
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
30
30
Operatori
• Aritmetici (binari e unari)
+, -, *, /
% modulo (resto dopo la divisione)
++
incremento unario
++x incrementa e restituisce il valore di x
x++ restituisce il valore di x e incrementa
--
decremento unario
negazione unaria. Restituisce la negazione
dell’operando (converte un numero positivo in
negativo e viceversa)
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
31
31
Operatori
• Funzioni matematiche
• Proprietà dell’oggetto Math
• Seno_di_x = Math.sin(x);
• Conversione di un numero in stringa
var x = 33;
var y = x.toString(2);
//2 è la base
// la stringa y sarà caricata con “100001”
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
32
32
Operatori
• Confronto (restituiscono un valore true false)
== equal to
!= not equal to
>, >=, <, <=
• Booleani
&& AND
||
!
OR
NOT
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
33
33
Operatori
• String
"Maggio"
"maggio" + "ciondolo"
• Assegnamento
= assegna alla variabile a sinistra il valore
dell’operando a destra
+= aggiunge il valore dell’operando a destra alla
variabile a sin e assegna il valore a variabile sin
( -=, *=, /= )
&= calcola AND tra op a destra e sin e assegna valore
a var sin ( |= )
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
34
34
Operatori
• Special
– Conditional operator
Se la condizione è vera assegna alla variabile il primo
valore, altrimenti il secondo
(condition) ? trueVal : falseVal
preferredPet = (cats > dogs) ? "felines" : "canines"
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
35
35
Istruzioni
• z = x + y; Espressioni
• {x = 1; y = 2; z = x + y; } blocco di istruzioni
• if else (else può essere omesso)
if (condition)
{ statements1; }
else
{ statements2; }
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
36
36
Istruzioni
if (condition1)
{ statements1; }
else if (condition2)
{ statements2; }
else if (condition3)
{ statements3; }
else
{ statements4; }
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
37
37
Istruzioni
• switch
switch (favoritePet){
case "dog" :
statements;
break;
case "cat" :
statements;
break;
case "iguana" :
statements;
break;
default : statements;
}
default: caso particolare di etichetta
In generale identificatore: istruzione
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
38
38
Istruzioni
• for
for (initial-statement; test; increment)
{ statements; }
for (i=0; i<10; i++){
statements; }
• do while
do
{ statements;}
while (condition)
• while
while (condition)
{ statements; }
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
39
39
Istruzioni
• break
– Abortisce l’esecuzione del loop e passa il controllo
alla prima istruzione dopo il loop
• continue
– Abortisce la singola esecuzione del loop e passa il
controllo alla valutazione della condizione
specificata dall’istruzione di loop
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
40
40
Istruzioni
• break
cicloesterno:
for (var i=0; i<10; i++) {
ciclointerno:
for (var j=0; j<10; j++) {
……………….
if (….) break cicloesterno;
}
}
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
Etichettatura di istruzione.
Identificatore seguito da
due punti
identificatore: istruzione
41
41
Funzioni
• Funzione
– Creazione di una funzione
– Preferibilmente nell’HEAD della pagina (caricato
per primo. Garantisce che la funzione sia caricata
prima che l’utente interagisca e la chiami)
function funcName(argument1,argument2,…)
{ statements; }
– Utilizzo di una funzione
funcName(argument1,argument2,…)
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
42
42
Funzioni
• return expression;
– Istruzione valida solo nel corpo di una funzione
– expression è valutata e restituita come valore
della funzione
– L’esecuzione della funzione termina
– Se non c’è expression associata o è raggiunta la
fine del corpo della funzione, il valore restituito è
undefined
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
43
43
Funzioni
<HTML>
<HEAD>
<SCRIPT language="JavaScript">
function eleva_al_quadrato(x)
{
return x*x;
}
</SCRIPT>
</HEAD>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
44
44
Funzioni
<BODY>
<H1>Funzione eleva al quadrato</H1>
<SCRIPT language="JavaScript">
for(i = 1, x=1; i < 10; i++, x++)
{
y = eleva_al_quadrato(x);
document.write(x + " **2 = " + y);
document.write("<br>");
}
</SCRIPT>
</BODY>
</HTML>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
45
45
Funzioni
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<SCRIPT language="JavaScript">
function eleva_al_quadrato()
{
var x = document.calcola.numero.value;
document.calcola.risultato.value = x*x;
}
</SCRIPT>
</HEAD>
…
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
46
46
Funzioni
<BODY>
<H1>Funzione eleva al quadrato</H1>
<form name="calcola">
<table>
<tr> <td>Numero:</td>
<td><input type="text" name="numero" size="12"
onchange="eleva_al_quadrato();"></td>
</tr>
<tr><td>Numero al quadrato:</td>
<td><input type="text" name="risultato" size="12"></td>
</tr>
<tr>
<td><input type="button" value="Calcola" onclick="eleva_al_quadrato();"></td>
</tr>
</table>
</form>
</BODY>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
47
47
Funzioni
• Oggetto funzione
– La funzione è un tipo di dati:
• Si può costruire un array di funzioni
• Una funzione può essere passata ad un’altra
funzione come argomento
• …..
function f(x) {return x*x;}
var f = new Function {"x", "return x*x; "};
costruttore Function
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
48
48
Oggetti
• Oggetto (insieme non ordinato di valori con
nome)
– Oggetto immagine con proprietà altezza:
immagine.altezza
– Gli oggetti possono contenere qualsiasi tipo di
dati
document.modulouno.campo1
– Incluse le funzioni (metodi)
document.write("hello world");
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
49
49
Oggetti
• Creazione di oggetti
var point = new Object();
point.x = 2.3;
point.y = 5;
• Accesso agli oggetti
objectName.propertyName
carObj.maker="Toyota";
carObj.year=1990;
document.write(carObj.year);
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
50
50
Oggetti
…
La proprietà è creata assegnando un valore
<SCRIPT language="JavaScript">
var libro = new Object();
libro.titolo = "JavaScript: La guida";
libro.autore = "David Flanagan";
libro.editore = "Apogeo";
Oggetto annidato
libro.capitolo1 = new Object();
libro.capitolo1.titolo = "Capitolo 1";
libro.capitolo1.contenuto = "Introduzione a JavaScript";
document.write("<H2>Libro</H2>");
document.write("<B>" + libro.titolo + "</B><BR>");
document.write("<B>" + libro.autore + "</B><BR>");
document.write("<B>" + libro.editore + "</B><BR><BR>");
document.write("<B>" + libro.capitolo1.titolo + "</B><BR>");
document.write("<B>" + libro.capitolo1.contenuto + "</B><BR>");
</SCRIPT>
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
51
51
Oggetti
• Creazione di oggetti con costruttore predefinito
//Creazione di un oggetto "libro"
//mediante il costruttore predefinito Object()
var libro = new Object();
libro.titolo = "JavaScript: La guida";
libro.autore = "David Flanagan";
libro.editore = "Apogeo";
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
52
52
Oggetti
• Creazione di oggetti con costruttore specializzato
//Definizione di un costruttore specializzato "Libro"
//(Classe; la classe è definita definendo una funzione costruttore)
function Libro(a,b,c)
Utilizza gli argomenti per
{
inizializzare le proprietà
this.titolo = a;
dell’oggetto vuoto creato
this.autore = b;
dalla parola chiave this
this.editore = c;
}
Convenzione:
Nome di classe: inizia con maiuscolo
Nome di istanza: inizia con minuscolo
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
53
53
Oggetti
//Creazione di due oggetti della classe mediante il costruttore
var libro1 = new Libro("JavaScript: La guida", "D.Flanagan","Apogeo");
var libro2 = new Libro("XML", "P.Pialorsi","Mondadori");
…
document.write("<H2>Oggetto libro1 della classe Libro</H2>");
document.write("<B>Titolo: " + libro1.titolo + "</B><BR>");
document.write("<B>Autore: " + libro1.autore + "</B><BR>");
…
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
54
54
Oggetti
• Metodi
Una funzione può essere assegnata ad una proprietà di un oggetto
//Definizione delle funzioni da utilizzare come metodi
function Area_rettangolo()
{
return this.larghezza * this.altezza
Vedi nota
}
//Definizione del costruttore degli oggetti Rettangolo
function Rettangolo(lar, alt)
{
this.larghezza = lar;
//Definizione proprietà
this.altezza = alt;
this.area = Area_rettangolo;
//Definizione metodi
}
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
55
55
Oggetti
//Creazione di un oggetto
var rettangolo1 = new Rettangolo(30,40);
document.write("<H2>Oggetto Rettangolo1</H2><BR>");
document.write("<B>Larghezza:" + rettangolo1.larghezza + "</B><BR>");
document.write("<B>Altezza:" + rettangolo1.altezza+ "</B><BR>");
//Esecuzione di un metodo dell'oggetto
var a = rettangolo1.area();
document.write("<B>Area:" + a + "</B><BR>");
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
56
56
Oggetti
• Nota Una funzione è un dato
(può essere assegnata ad una variabile
o ad una proprietà di un oggetto)
DEFINIZIONE
Definisce la funzione.
La variabile
Area_rettangolo
contiene il riferimento
alla struttura in memoria.
function Area_rettangolo() {return this.larghezza * this.altezza};
function Rettangolo(lar, alt)
{this.larghezza = lar; //Definizione proprietà
this.altezza = alt;
this.area = Area_rettangolo; //Definizione metodi
}
var a = rettangolo1.area();
B5 Java Script
B5 Java Script
USO
Chiama la funzione
area()
Paolo Salvaneschi
Paolo Salvaneschi
RIFERIMENTO
Il riferimento contenuto nella
variabile Area_rettangolo è
copiato nella variabile area.
this.area =Area_rettangolo
non
this.area =Area_rettangolo()
57
57
Oggetti
• JavaScript
– Debolmente tipizzato
– Non contiene la nozione di classe ma la
emula con oggetti prototipo definiti dal
metodo costruttore
– Proprietà degli oggetti aggiunte
dinamicamente
– I metodi sono dati
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
58
58
Oggetti
• Java
– Fortemente tipizzato
– Ereditarietà basata su classi
– La struttura degli oggetti definita alla
definizione della classe
– I metodi non sono dati
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
59
59
Oggetti
function Area_rettangolo() JavaScript
{
return this.larghezza * this.altezza
}
function Rettangolo(lar, alt)
{
Definizione
// attributi
classe
this.larghezza = lar;
this.altezza = alt;
// metodi
this.area = Area_rettangolo;
}
var rettangolo1 = new Rettangolo(30,40);
var a = rettangolo1.area()
Java
class Rettangolo{
// attributi
private int area;
private int larghezza ;
private int altezza;
// metodi
public Rettangolo(int lar, int alt)
{ larghezza = lar;
altezza = alt;
}
public int getArea()
{ area = larghezza * altezza ;
return area;
}
}
Creazione istanza e chiamata metodo Rettangolo rettangolo1 = new Rettangolo(30,40);
int a = rettangolo1.getArea();
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
60
60
Oggetti
• JavaScript: linguaggio ad oggetti basato su
prototipi
• Linguaggi basati su classi (java)
– Una classe definisce le proprietà che
caratterizzano un insieme di oggetti
– Una istanza è uno specifico oggetto della classe
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
61
61
Oggetti
• Linguaggi basati su prototipi
– Ci sono solo oggetti
– Un oggetto prototipo è uno schema da cui
ottenere le proprietà iniziali di un oggetto
– Un oggetto specifica le sue proprietà o alla
creazione o a run time
– Un qualunque oggetto può essere associato
come prototipo ad un altro oggetto. Il secondo
oggetto condividerà le risorse del primo
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
62
62
Oggetti
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
63
63
Oggetti
• Ereditarietà
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
64
64
Oggetti
• Prototipi ed ereditarietà
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
65
65
Oggetti
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
66
66
Oggetti
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
67
67
Oggetti
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
68
68
Oggetti
B5 Java Script
B5 Java Script
Eredita
dept
Eredita
name
Eredita e sovrascrive dept
Eredita
name
Paolo Salvaneschi
Paolo Salvaneschi
69
69
Array
• Array (insieme ordinato di valori numerati)
a
a[2] terzo elemento dell’array (l’indice inizia da 0)
var a = new Array();
Creazione di array vuoto
con il costruttore Array()
a[0] = 1.2;
a[1] = “JavaScript”;
a[2] = true;
Assegnazione di elementi
(anche di tipi diversi) all’array
Un nuovo elemento può
essere aggiunto in qualunque
momento (basta assegnargli
un valore)
B5 Java Script
B5 Java Script
Paolo Salvaneschi
Paolo Salvaneschi
70
70
Array
• Array (insieme ordinato di valori numerati)
var a = new Array(10);
Creazione di array di 10
elementi
var a = [“pippo”, true, 2.34];
a[1] = 3.14;
i=2;
a[i] = “ciao”;
a[1] = 3.14;
a[1000] = “fine”;
B5 Java Script
B5 Java Script
Lettura / scrittura
Gli indici non devono
ricadere necessariamente
in un intervallo continuo
di numeri. E’ allocata
memoria solo per i due
indici.
Paolo Salvaneschi
Paolo Salvaneschi
71
71