JavascriptProva

mercoledì 1 agosto 2012

La funzione usata come funzione o come costruttore

Bene, dopo aver fatto questa clamorosa scoperta dell'acqua calda, uso una funzione dell'oggetto finestra, quello di base, come costruttore per un nuovo oggetto.
 
<html>
<head>
<script>
function cerchio(raggio){
 this.area=raggio*raggio*Math.PI;
 
 
}
var Cerchio = new cerchio(3);

alert(Cerchio.area);
 
</script>
</head>
<body bgcolor = cyan>


</body>
</html>
Ecco:
28.274333882308138

Se viceversa, uso this.area al di fuori dell'oggetto Cerchio, che succede?
<html>
<head>
<script>
function cerchio(raggio){
 this.area=raggio*raggio*Math.PI
}

cerchio(3);
alert(window.area);

 
</script>
</head>
<body bgcolor = cyan>


</body>
</html>
28.274333882308138
in questo caso non istanzio alcun oggetto Cerchio di tipo cerchio, ma eseguo semplicemente la funzione appartenente all'oggetto window.
In questo caso la proprietà area appartiene all'oggetto window, tant'è vero che viene mostrata chiedendo al programma di mostrare nella finestra di dialogo la proprietà window.area.
Ora invece di eseguire la funzione cerchio, la uso come costruttore per istanziare un oggetto Cerchio, e poi vedo se dicendo al programma di mostrare la proprietà window.area avviene qualcosa di diverso.
<html>
<head>
<script>
function cerchio(raggio){
 this.area=raggio*raggio*Math.PI
}

var Cerchio=new cerchio(3);
alert(window.area);

 
</script>
</head>
<body bgcolor = cyan>


</body>
</html>
undefined
Ecco: in questo caso, usando la funzione cerchio(raggio) come costruttore non l'ho eseguita nell'ambito dell'oggetto window, ma per costruire un oggetto Cerchio, cosa che crea una proprietà area dell'oggetto Cerchio, non dell'oggetto window.
Provo a chiedere al programma di mostrare sia la proprietà window.area sia la proprietà Cerchio.area
<html>
<head>
<script>
function cerchio(raggio){
 this.area=raggio*raggio*Math.PI
}

var Cerchio=new cerchio(3);
alert(window.area);
alert(Cerchio.area);
 
</script>
</head>
<body bgcolor = cyan>


</body>
</html>
undefined
28.274333882308138
Come volevasi dimostrare.

Vorrei cogliere l'essenza della differenza fra il Javascript, il Java, il C++ per quanto riguarda l'uso dei costruttori...

Nessun commento:

Posta un commento