|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
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 ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
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 */ |
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Jul 2009
Messaggi: 125
|
Quote:
![]() edit: ah non avevo letto i commenti Ultima modifica di CercoAiutoo : 13-09-2009 alle 19:13. |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jul 2009
Messaggi: 125
|
Ma come fa poi a creare una classe in quel modo ?
Non capisco la sintassi!! ![]() |
![]() |
![]() |
![]() |
#5 |
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; } } Codice:
var x=myObject.x; // x è 10 var z=myObject.sum(3,5); // z è 8 |
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Jul 2009
Messaggi: 125
|
Quote:
![]() 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 |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
Mi sembrava anche a me una sintassi strana... ho ragionato per deduzione e sulla struttura del linguaggio...
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
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 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 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 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; 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); Codice:
super(4); //super riferito a Shape Ultima modifica di MEMon : 13-09-2009 alle 22:19. |
|
![]() |
![]() |
![]() |
#9 |
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 ? ![]() |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
Codice:
function doSomethng(){ // some stuff } Codice:
doSomething(); // usata come semplice funzione var o=new doSomething(); //usata come costruttore di una classe Ultima modifica di MEMon : 14-09-2009 alle 00:19. |
|
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Jul 2009
Messaggi: 125
|
ah ecco ora è tutto chiaro grazie
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:05.