Newsgroup: it.comp.lang.javascript
Titolo: Re: chiamata a "new" resa singletone - x Zer0

 allora credo che la mia conoscenza di javascript si fermi qui...
Nono.. ti dissi che ci potevi arrivare da solo, e ci puoi arrivare da
solo.. le conoscenze che hai ti bastano, questo tuo post lo dimostra.
-- 
ZER0
~ The Tangent Universe collapsed 5951 days, 10 hours, 51 minutes and 57
seconds ago.
on air ~ "Go Betty Go - C'mon"
on air ~ "Go Betty Go - C'mon"

Ricordi che alla cena dicevi che avevi reso singletone anche la chiamata 
a new?
Giusto ora ho avuto un flash, dimmi se ho indovinato:
var K_mioObj;
function mioOggetto() {
   if (K_mioObj == null) {
     K_mioObj = new ...;
   }
   return K_mioObj;
}
var obj = new mioOggetto();
centrato? :-)

 centrato? :-)
No :)
-- 
ZER0
~ The Tangent Universe collapsed 5951 days, 10 hours, 41 minutes and 18 seconds ago.
on air ~ "Maxeen - Please"

 
grazie grazie...
cmq la chiamata a new la esegui, vero?

 No :)


 allora credo che la mia conoscenza di javascript si fermi qui...
Nono.. ti dissi che ci potevi arrivare da solo, e ci puoi arrivare da
solo.. le conoscenze che hai ti bastano.
-- 
ZER0
~ The Tangent Universe collapsed 5951 days, 10 hours, 51 minutes and 57 seconds ago.


 di dover fare uno "spoiler" qua dentro, ma...
beh a voler far del male, basta in javascript basta importare un js che 
ridefinisce anche un'eventuale classe singleton....

> cmq la chiamata a new la esegui, vero?
e mi dici che non è overloadabile (che brutto termine..)

 javascript, ahimé)
l'autore del thread non legga:
leggendo da qualche parte, dichiarando la funzione come anonima.
http://dhtmlkitchen.com/learn/js/singleton/index.jsp
in effetti sono quel che dici è verisissimo manca la static e tante 
altre cose, scrivere design pattern con javascript è un po' un 
casino...ne sto traducendo alcuni e trovo difficoltà logiche.

 Perché?
Perche', come dice il topic, e' una cosa tra me e lui; iniziata durante la
cena che abbiamo fatto. Glielo lasciai un po' come compito per casa
personale, e vorrei che cosi' lo svolgesse.
Fatto in un NG, potrebbero arrivare altre persone nel thread a fornire
soluzioni.
-- 
ZER0
~ The Tangent Universe collapsed 5951 days, 11 hours, 6 minutes and 47 seconds ago.
on air ~ "Maki Kimura - Beyond The Bounds"

 Leggiti il post che ti ho appena scritto, va la'. ;)
Non è comunque un "vero" singleton, perché se uno ci piazza un bel
realObj=null; e poi rieffettua la chiamata ti frega.
Vero è che resta 1 sola istanza facendo così, però distruggo/ricreo la
classe (e in un "vero" singleton ciò non dovrebbe esser fattibile). 
Ma mi sa che ciò non è risolvibile, perché ci vorrebbe una qualche
variabile che una volta istanziata non sia toccabile e sia gestibile solo
internamente alla "classe/function" (manca la static per la function in
javascript, ahimé)
Se la ho azzeccata: a) non ci credo... b) scusa, non avevo letto bene il
post...come si fa la faccina "cazzo ho fatto una cazzata" ?
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 Proviamo ad avvicinarci 
Per l'appunto.. -_-
Leggiti il post che ti ho appena scritto, va la'. ;)
-- 
ZER0
~ The Tangent Universe collapsed 5951 days, 11 hours, 7 minutes and 38 seconds ago.


 casino...ne sto traducendo alcuni e trovo difficoltà logiche.
Sì, sono solo IMHO esercizi.
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.




Certo. Se ti ricordi bene ti dissi che avevo fatto il singleton sia via
"new" che via metodo.
Se vuoi continuare il thread passiamo in mail comunque (certo, essertene
ricordato adesso.. :P )
-- 
ZER0
~ The Tangent Universe collapsed 5951 days, 10 hours, 57 minutes and 29 seconds ago.
on air ~ "Yellowcard - Breathing"

 Giusto ora ho avuto un flash, dimmi se ho indovinato:
qualcuno ha del codice di un Abstract Factory? Cadrebbe a fagiolo.

 casino...ne sto traducendo alcuni e trovo difficoltà logiche.
Per quanto riguarda il link che hai consigliato: non avrei mai creduto 
di dover fare uno "spoiler" qua dentro, ma...
S
P
O
I
L
E
R
...usando l'operatore new sulla proprieta' constructor del nostro 
oggetto ne otteniamo un'altra istanza e siamo da capo.

 ricordato adesso.. :P )
Perché?
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

In data Mon, 14 Feb 2005 17:30:11 +0100, (:- Dan :-) ha scritto:
Proviamo ad avvicinarci (scrivo così al volo, so che Zer0 mi risponderà
"altro che avvicinarsi, sei lontano anni luce".
Quello che di primo acchito mi viene in mente è:
var realObj=null;
function mioOggetto() {
 if(realObj) this.getOggetto=realObj;
 else
  this.getOggetto=function() {
   this.a="a"; this.b="b";
   realObj=this;
   return this;
  }
}
var obj=new mioOggetto().getOggetto();
Boh...non capisco se quanto ho scritto sopra è una boiata di dimensioni
enormi oppure no...


 javascript, ahimé)
Si puo' fare e in piu' di un modo.
-- 
ZER0://coder.gfxer.web-designer/
~ Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)

 casino...
Mica vero. Ovviamente va fatto con una certa ottica.
-- 
ZER0://coder.gfxer.web-designer/
~ Come devo regolare la stampante laser per stordire?
(How do I set a laser printer to stun?)

 ridefinisce anche un'eventuale classe singleton....
Non l'ho capita. Cmq se uno si vuol far del male in JS puo' fare qualsiasi
cosa, dato che non e' tipizzato.
-- 
ZER0://coder.gfxer.web-designer/
~ Un computer e' fondamentalmente stupido.
Non fa cio' che vuoi che faccia, ma cio' che gli dici di fare.
Solo, e' uno stupido dannatamente veloce.

 ne otteniamo un'altra istanza e siamo da capo.
Ma infatti.
-- 
ZER0://coder.gfxer.web-designer/
~ Deformazione professionale č:
Quando in ascensore senti la ragazza accanto che tira fuori il cellulare,
e ti volti per capire se e' un modello sul quale puoi sviluppare in J2ME.

 Mica vero. Ovviamente va fatto con una certa ottica.
secondo me per gli strumenti offerti dal linguaggio java e c++ sono più 
appropriati per implementare le logiche.





Che siano piu' appropriati non lo metto in dubbio, tra l'altro java in
particolare ha gia' dei design pattern integrati nel linguaggio.
Il discorso non era se altri linguaggi fossero piu' appropriati o meno, ma
se "scrivere design pattern con javascript" fosse "un po' un casino".
E' solo su quest'ultima affermazione che dissento, tutto qui.
Poi e' ovvio che altri linguaggi risultino piu' appropriati. Ma il bello
dei design pattern e' che sono "logici", "astratti".
-- 
ZER0://coder.gfxer.web-designer/
~ L'ingegnere non vive, funziona.

 mi riferivo allo spoiler.
Appunto non capisco.
-- 
ZER0://coder.gfxer.web-designer/
~ Non esistono donne brutte. Dipende solo da quanta vodka bevi.
(proverbio russo)

Altrimenti sarebbe andato bene anche quello postato da Dan.
Ci devo mettere uno spoiler waring?
s
p
o
i
l
e
r
Qualcosa del tipo:
obj_1={
 n:0,
 setn:function(v){
	this.n=v;
 },
 outn:function(s){
	alert(s+this.n);
 }
}
function obj(){
 return obj_1;
}
 var x=new obj();
 x.setn(1);
 x.outn("n in x "); // n in x 1
 var y=new obj();
 y.setn(2);
 y.outn("n in y "); // n in y 2
 x.outn("n in x "); // n in x 2 
Mi ci sono avvicinato?
'bye

[...]

Mi accodo: scusami ma non ho capito nulla neanche io.

 Mi ci sono avvicinato?
Sigh.. :) Non voleva essere un "contest" o qualcosa del genere.. Io penso
che il "come" si implementi un DP non sia tanto importante, l'importante e'
rispettarne i criteri e la logica.. e se questi vengono centrati allora
ogni implementazione va bene.
Per quanto riguarda il Singleton io ho trovato un approccio che reputo
interessante, ma e' stato piu' un esercizio di stile che altro.. tant'e'
che in aggiunta vi ho messo anche il metodo "getInstance()", che alla fine
reputo piu' pulito.
Con Dan era venuta fuori questa cosa durante la cena che avevamo fatto, e
volevo spronarlo a fare un certo tipo di ragionamento per arrivare
all'approccio che avevo usato io; e ci sta arrivando.
Se poi volete, quando ci sara' giunto postero' il codice che uso io per il
Singleton ma non e' niente di che ve l'assicuro. :)
-- 
ZER0
~ The Tangent Universe collapsed 5952 days, 1 hours, 42 minutes and 49 seconds ago.

 foo._b(), rendendo i suddetti membri simili a dei membri statici.
In quanto NON puoi accedere a foo.a, ma puoi accedere a foo._b():
var bar=new foo();
alert(bar.a); // restituisce undefined, js 1.3/1.5
alert(foo.a); // restituisce undefined, js 1.3/1.5
alert(bar._b); // restituisce undefined, js 1.3/1.5
alert(foo._b); // restituisce undefined su js 1.5, la funzione su 1.3.
Ma in realta', foo._b parrebbe essere solo un "riflesso", non un "membro
statico". Mi spiego con un esempio pratico:
Su JS 1.3:
function foo(){
	function element(){return "fire"};
	this.sayElement=function(){alert(element())};
	return this;
}
var bar=new foo();
alert(foo.element) // restituisce funzione
bar.sayElement(); // restituisce "fire"
Sembrerebbe quindi che fosse effettivamente come dici tu, ma un esame piu'
approfondito porta al seguente codice:
function foo(){
	function element(){return "fire"};
	this.sayElement=function(){alert(element())};
	return this;
}
foo.element=function(){return "ice"};
var bar=new foo();
alert(foo.element) // restituisce funzione ridefinita (ice)
bar.sayElement(); // restituisce ancora "fire"
Riassumendo, le variabili sono "private" anche in JS 1.3; mentre i metodi
vengono "riflessi" come "membri statici" di classe, ma non sono
effettivamente l'entry point per la funzione, che continua a rimanere
privata.
Ammesso e concesso che non abbia fatto qualche boiata visto che sono in
piedi dalle sei e mezza di stamane (maledette targhe alterne) e sono andato
a letto alle una e mezza (maledetti giochi di ruolo).
-- 
ZER0
~ The Tangent Universe collapsed 5952 days, 2 hours, 19 minutes and 51 seconds ago.
on air ~ "Gianluca Grignani - Che ne sarà di noi"

 privata.
Bella e giusta precisazione.

> privata.
Che rende piu' fattibile, nel caso uno proprio voglia, un certo tipo di
approccio a JS.
-- 
ZER0
~ The Tangent Universe collapsed 5952 days, 5 hours, 22 minutes and 7 seconds ago.
on air ~ "donny darko - Mad World (full version)"