Newsgroup: it.comp.lang.javascript
Titolo: Domanda base base - Metodo costruttore

Ho una domanda super base, ma stranamente gugol non mi � di aiuto:
in js � possibile utilizzare un metodo costruttore all'interno di un 
oggetto? ovvero un metodo lanciato di default quando si istanzia un oggetto?
Es. di comportamento che mi aspetto:
function Oggetto() {
	var a=1;
	var b=2;
	this.c;
	this.somma=function() {
		c=a+b;
	}
}
var pinuccio=new Oggetto;
alert(pinuccio.c); // mi dar� undefined presumo
pinuccio.somma();
alert(pinuccio.c); //mi dar� 3
 >>>>>>>>>>>>>>>>>>>>>>
Ora ammesso di non aver scritto scemenze di sopra, esiste modo di 
lanciare un metodo (come somma()) quando si istanzia l'oggetto?
ovvero:
var pinuccio=new Oggetto;
e somma() viene lanciato da un metodo costruttore col risultato che c 
sia uguale a 3 alla creazione dell'oggetto.
Grazie a chi vorr� chiarirmi sta cosa...
-- 
Z.

 sia uguale a 3 alla creazione dell'oggetto.
per quanto sopra potrebbe bastare:
 this.somma=function() {
  return a+b;
 }
 this.c=this.somma();
In generale devi crearti il tuo metodo che funga da costruttore ed 
invocarlo.
Quindi il tuo oggetto diventerebbe:
function Oggetto() {
 	var a=1;
 	var b=2;
        this.c;
 	this.somma=function() {
 		this.c=a+b;
 	}
        this.somma();
}

 }
Gentilissimo e chiarissimo :)
anche x il chiarimento sullo scope di c.
Anzi approfitto della gentilezza x chiedere anche questo (proprio sullo 
scope):
function Oggetto() {
     var a=1;
     var b=2;
     this.c;
}
function somma() {
         with (this) c=a+b;
}
Oggetto.prototype.somma=somma;
In questo modo lo scope è corretto?
sarò diventato un inetto a cercare con google, ma non trovo una 
descrizione del "with (this)" a parte qualche esempio dove lo usano (per 
mostrare altro)...
So che sembra assurdo data la diffusione di js, ma trovo tutorial, guide 
ed esempi di cose anche avanzatissime e su qualche cosa di basilare non 
trovo nulla...
Grazie ancora :)
-- 
Z.

 mostrare altro)...
mai usato in una function ... this si riferisce all'oggetto attuale, 
quindi dentro una function immagino si riferisca alla function stessa.
with non lo uso, preferisco usare sempre sintassi estese oppure assegnare 
l'oggetto a una var temporanea.

On 02/09/2009 14:21, Cristiano Larghi wrote:
Ancora grazie.
Ho fatto qualche prova e avevi ragione su tutto.
alla fine una sintassi di questo tipo (volendo usare il prototype) funziona:
function Oggetto() {
     this.a=1;
     this.b=2;
     this.c;
}
Oggetto.prototype.somma=function() {
         this.c=this.a+this.b;
};
il che era abbastanza prevedibile, ma come domanda finale, se tengo una 
variabile privata:
function Oggetto() {
     var a=1;
     this.b=2;
     this.c;
}
Oggetto.prototype.somma=function() {
         this.c=a+this.b;
};
il metodo somma così scritto va a cercare una variabile "a" globale, non 
l'attributo della sua classe Oggetto, come mai?
Lo scope di una variabile privata non si estende col prototype?(chiedo 
scusa x le domande banali, ma sono aduso a OOP + "classico"...)
Grazie della pazienza...
-- 
Z.

 domande banali, ma sono aduso a OOP + "classico"...)
Non sono banali, tutt'altro ... è che javascript non è un linguaggio ad 
oggetti, e solo ultimamente si è diffusa la moda di usare queste 
sintassi ... quindi, IMHO, per capire bene occorre fare come stai facendo 
te: testare.

 te: testare.
Grazie di tutto l'aiuto intanto, è stato molto prezioso:)
Pian piano inizio a capirlo meglio:P
-- 
Z.

 sia uguale a 3 alla creazione dell'oggetto.
Come abbiamo detto, il construttore � la funzione stessa, quindi:
function Oggetto(){
	var a = 1;
	var b = 2;
 
	this.c = undefined;
	this.somma = function(){
		this.c = a + b;
	}
	this.somma();
}
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."







Caspita, grazie davvero.
Non pensavo di riceve tanto aiuto e cortesia :P
Pian piano mi si sta chiarendo un po' la mente...
Fino alle prossime domande grazie mille x informazioni, chiarimenti e link!
-- 
Z.