Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-09-2009, 18:27   #1
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
[Javascript] Object literal ?

Qualcuno conosce una guida online per object literal ? Ho trovato questo codice ma non ci capisco niente:

Codice:
var ciao = {
    versione: "0.11"
};
ciao.Base = new Class({
    initialize: function () {
        this.versione = ciao.versione
    },
    RegisterModule: function (a) {
        a.Base = this
    }
});


var boh = new ciao.Base();

Cos'è quel "new Class" ? Istanzia un' oggetto della classe Class ?

Non riesco a trovare niente su internet
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 18:47   #2
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Codice:
var ciao = {
    versione: "0.11"
};
ciao.Base = new Class({ /* classe Class, scelta infelice come nome */
    initialize: function () {
        this.versione = ciao.versione
    },
    RegisterModule: function (a) {
        a.Base = this
    }
});

var boh = new ciao.Base(); /* boh ora ha come tipo Class */
Purtroppo js ha una tipizzazione obrobriosa.
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 18:56   #3
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
Quote:
Originariamente inviato da _Claudio Guarda i messaggi
Codice:
var ciao = {
    versione: "0.11"
};
ciao.Base = new Class({ /* classe Class, scelta infelice come nome */
    initialize: function () {
        this.versione = ciao.versione
    },
    RegisterModule: function (a) {
        a.Base = this
    }
});

var boh = new ciao.Base(); /* boh ora ha come tipo Class */
Purtroppo js ha una tipizzazione obrobriosa.
and so ?

edit: ah non avevo letto i commenti

Ultima modifica di CercoAiutoo : 13-09-2009 alle 19:13.
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 20:52   #4
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
Ma come fa poi a creare una classe in quel modo ?
Non capisco la sintassi!!
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 21:46   #5
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quello è il framework mootools, non centra nulla con la classica sintassi javascript.

Se vuoi creare un oggetto literal devi fare in questo modo:
Codice:
var myObject={
	x:10,
	y:20,
	sum:function(a,b){
		return a+b;
	}
}
In questo modo hai creato UN singolo oggetto che disponde di due proprietà(x e y) e un metodo(sum).
Codice:
var x=myObject.x;  // x è 10
var z=myObject.sum(3,5); // z è 8
Se invece ti interessa creare una classa, e quindi istanziare i tuoi oggetti con new MyClass, allora il discorso è diverso, e leggermente più complesso perchè javascript è di tipo protipale.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 21:51   #6
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Quello è il framework mootools, non centra nulla con la classica sintassi javascript.

Se vuoi creare un oggetto literal devi fare in questo modo:
Codice:
var myObject={
	x:10,
	y:20,
	sum:function(a,b){
		return a+b;
	}
}
In questo modo hai creato UN singolo oggetto che disponde di due proprietà(x e y) e un metodo(sum).
Codice:
var x=myObject.x;  // x è 10
var z=myObject.sum(3,5); // z è 8
Se invece ti interessa creare una classa, e quindi istanziare i tuoi oggetti con new MyClass, allora il discorso è diverso, e leggermente più complesso perchè javascript è di tipo protipale.
Grazie ho capito tutto
Complesso ? Fa niente... sai dove posso trovare qualche guida o tutorial al riguardo ?

Su internet non si trova quasi niente su object literal eppure è strausato
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 21:51   #7
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Mi sembrava anche a me una sintassi strana... ho ragionato per deduzione e sulla struttura del linguaggio...
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 22:13   #8
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da CercoAiutoo Guarda i messaggi
Grazie ho capito tutto
Complesso ? Fa niente... sai dove posso trovare qualche guida o tutorial al riguardo ?

Su internet non si trova quasi niente su object literal eppure è strausato
Se cerchi su google javascript literal object trovi moltissima roba.

Complesso nel senso che è un pò diverso da come si ragiona di solito con i linguaggi OO, ti scrivo qualcosa.

Come ti ho detto javascript è prototipale nel senso che ogni classe contiene un "oggetto" chimato prototype il quale contiene tutti i metodi e talvolta anche le proprietà che suddetta classe dovrà avere.
Codice:
function MyClass(s){
	this.name=s;
}
MyClass.prototype.getName=function(){
	return this.name;
}
MyClass.prototype.setName=function(s){
	this.name=s;
}

var c=new MyClass("bla bla");
c.getName(); //  ritorna bla bla
COme vedi hai creato una classe MyClass, al suo prototype hai "dato" due metodi, in questo modo ogni istanza di MyClass possiede questi due metodi.
La particolarità del prototype è che se ora fai una cosa del genere:
Codice:
MyClass.prototype.clearName=function(){
	this.name="";
}

c.clearName(); // questo è possibile, magia della forma prototipale
Tutte le istanze di MyClass avranno a disposizione il nuovo metodo!

Ti starai adesso chiedendo come fare una bella ereditarietà della tua nuova e fiammante classe, ti viene sempre in aiuto il prototype.

Codice:
function Shape(vertices){
	this.vertices=vertices;
	this.color="black";
}
Shape.prototype.setColor=function(c){
	this.color=c;
}


function Square(side){
	Shape.apply(this,4);
	this.side=side;
}
Square.prototype=new Shape;
Square.prototype.constructor=Square;
Square.prototype.calcArea=function(){
	return this.side*this.side;
}

var sq=new Square(10);
sq.setColor("white");  //possibile perchè ha ereditato il metodo
sq.calcArea();  //return 100

sq instanceof Square;  //return true
sq instance of Shape;  //return true, è una eredità a tutti gli effetti!!
In questo modo crei due splendide classi, Shape e Square, la seconda estende la prima aggiungendo nuove carattersistiche(calcArea), il tutto attraverso il prototype.
In particolare come vedi viene assegnato al prototype di Square una istanza di Shape, in questo modo Square ottiene il prototype di Shape.
Ricorda poi di riassegnare il constructor a Square, in quanto dopo l'operazione
Codice:
Square.prototype=new Shape;
anche il constructor di Square diventa quello di Shape, e ciè non va bene.
Il constructor come dice la parola stessa è il costruttore, quello che contiene il codice da eseguire quando si creano nuove istanze con new.

Nel costruttore di Square puoi noatre una cosa strana
Codice:
Shape.apply(this,4);
Questo non fa altro che eseguire il costruttore di Shape nello scope di Square, per farla semplice è come se in Java avresti fatto
Codice:
super(4);   //super riferito a Shape
sperando che tu sia pratico di Java...

Ultima modifica di MEMon : 13-09-2009 alle 22:19.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 23:25   #9
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
Bene credo di aver capito
Avevo letto da qualche parte infatti che tramite prototype era possibile diciamo estendere dinamicamente una classe.

L' unica cosa che non ho capito è che MyClass, Shape e Square sono funzioni... perchè le chiami classi ? O forse tu hai indicato solo i costruttori delle classi ?
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2009, 00:04   #10
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da CercoAiutoo Guarda i messaggi
Bene credo di aver capito
Avevo letto da qualche parte infatti che tramite prototype era possibile diciamo estendere dinamicamente una classe.

L' unica cosa che non ho capito è che MyClass, Shape e Square sono funzioni... perchè le chiami classi ? O forse tu hai indicato solo i costruttori delle classi ?
Non sono funzioni, sono classi. Ok la differenza è lieve, diciamo che ogni funzione in javascript è una classe.

Codice:
function doSomethng(){
	// some stuff
}
Questa è ovviamente una funzione, ma è anche una classe, in particolare è il costruttore della classe, infatti il codice //some stuff viene eseguito in entrambi i modi:
Codice:
doSomething();  // usata come semplice funzione

var o=new doSomething();  //usata come costruttore di una classe
In javascript la vera e propria classe non esiste, esistono gli oggetti.

Ultima modifica di MEMon : 14-09-2009 alle 00:19.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2009, 00:18   #11
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
ah ecco ora è tutto chiaro grazie
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Oracle, stock option da quasi un miliard...
Starship: si è conclusa anticipat...
Un computer quantistico ha funzionato ne...
Sovranità sui dati: AWS è ...
Il nuovo nome della distro Linux mobile ...
Due ventole da 220 mm e non solo: Cooler...
Truffa telefonica via Google Ads: il bro...
Google pensiona le Gems di Gemini: cosa ...
Flight 14: incertezza per un problema a ...
C'è un problema con i robot Tesla: i dip...
Raggi gamma anomali dalla Via Lattea sve...
NIO vende il 30% della divisione scambio...
Sony brevetta un DualSense capace di acc...
Un volto per l'assistenza IA: cosa pu&og...
NVIDIA autorizza un buyback da 150 milia...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:28.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v