La definizione e l'estensione classi

La definizione e l'estensione classi

  

Problema che si desidera una strategia efficace per la definizione e l'estensione classi. Theory Una funzione è un oggetto, e come dimostrano le ricette precedenti, è possibile associare proprietà e metodi con una funzione. Allora, perché è necessario creare classi, dal momento che le funzioni possono essere trasformato in classi? La risposta si riferisce al problema di capire l'istanza della funzione. Utilizzo di chiusure di JavaScript, è possibile definire una funzione all'interno di una funzione, come mostrato nel codice seguente.

 Fonte: / website / ROOT / ajaxrecipes / javascript / functionsareobjects.html funzione GetFunctionFixed () (var inst = function (cmpval) (assertEquals (cmpval, inst.value);) inst return;)

Utilizzando una variabile locale, l'istanza della funzione è possibile fare riferimento nell'ambito dell'attuazione della funzione. Il sistema funziona perché le funzioni sono oggetti, e quindi oggetto di riferimento che sta accadendo. Soluzione Utilizzando il principio che le funzioni sono oggetti, è possibile creare una classe senza utilizzare la parola chiave new, come illustrato dal seguente esempio, che si basa sulla funzione all'interno di funzione tecnica.

 Fonte: / website / ROOT / ajaxrecipes / javascript / definingextendingclasses.html funzione CreateClassInstance () (var inst = function () (inst.instantiated = 10; inst.method = function () (inst.instantiated = 20;)) inst (); inst return;)

Nell'esempio di classe, una "classe" è creato perché chiamando la funzione assegnare la proprietà della funzione. In tal modo la funzione si comporta come una classe "." Il inst variabile si fa riferimento in tutta la classe "," rendendo possibile fare riferimento alla proprietà e ai metodi della classe "." In effetti, la "classe" si comporta come una vera classe, come dimostra il seguente codice di prova.

 Fonte: / website / ROOT / ajaxrecipes / javascript / function_are_classes definingextendingclasses.html: function () (var cls1 = CreateClassInstance (); info ( "function_are_classes", cls1); cls1.value = 10;assertEquals (10, cls1.instantiated); cls1.method (); assertEquals (20, cls1.instantiated); cls2 var = CreateClassInstance (); assertEquals ( "undefined", typeof (cls2.value));),

Gli esperimenti di codice di prova con varie sfaccettature a dimostrare che le istanze "oggetto" si sta comportando come un oggetto. La mostra in grassetto codice che gli "oggetti" cls1 e cls2 sono in realtà due istanze diverse. Dal momento che sembra così facili da creare una "classe" e un oggetto "," perché c'è una nuova parola chiave? La risposta è perché capire come riferimento incrociato l'istanza funzione con il metodo è complicata dopo la "classe" è stata creata l'istanza, come dimostra il seguente codice sorgente.

 Fonte: / website / ROOT / ajaxrecipes / javascript / function_classes_generates_error definingextendingclasses.html: function () (var cls = CreateClassInstance (); cls.method2 = function () ( inst.instantiated = 40; )try ( cls.method2 ();testManager.failed ();) catch (e) (info ( "functions_classes_generates_error", "ad eccezione attesi (" + ➥ e.toString () + ")");)),

Nella prova supplementare, la "classe" viene creata un'istanza e assegnato alla variabile cls. I riferimenti CLS variabile un "oggetto" che si estende con il metodo method2. Per l'attuazione del method2, "oggetto" si fa riferimento ad esempio usando la variabile inst. La variabile inst è stato scelto perché è stato definito quando l'oggetto "è stata creata un'istanza. L'esecuzione del codice genererà un'eccezione perché inst non è definito. Per rendere il lavoro, ad esempio, la funzione a cui fa riferimento method2 avrebbe dovuto cls di riferimento. In poche parole, fa riferimento l'istanza di "oggetto" all'interno di una funzione è più complicata di quanto dovrebbe essere. La soluzione è la nuova parola chiave, in quanto associa l'identificativo di questo con l'istanza di oggetto all'interno di una funzione. Riscrivere il codice CreateClassInstance di utilizzare la nuova parola chiave, si arriva alla funzione CreateRealClassInstance, illustrato nel codice seguente.

 Fonte: / website / ROOT / ajaxrecipes / javascript / definingextendingclasses.html funzione CreateRealClassInstance () (var inst = function () (this.instantiated = 10; this.method = function () (this.instantiated = 20;)) inst return new ();)

Confronto CreateClassInstance e CreateRealClassInstance, l'unica vera differenza è che la nuova parola chiave è utilizzata, mentre invoca la variabile inst come una funzione, e impian viene sostituita con questa. Utilizzando la nuova parola chiave di fronte a una funzione di convertire la funzione in una istanza di oggetto personalizzato, in cui l'istanza dell'oggetto è possibile fare riferimento utilizzando l'identificatore presente all'interno della funzione. L'istanza ha restituito l'oggetto può essere esteso e l'istanza di riferimento utilizzando la parola chiave this , come illustrato nella seguente test.

 Fonte: / website / ROOT / ajaxrecipes / javascript / function_instantiates_real_class definingextendingclasses.html: function () (var cls = CreateRealClassInstance (); cls.method2 = function () (this.instantiated = 40;) assertEquals (10, cls.instantiated); cls . method2 (); assertEquals (40, cls.instantiated);),

Chiamando la funzione CreateRealClassInstance, l'istanza restituita oggetto viene assegnato alla variabile cls. L'oggetto è esteso per includere il metodo method2, e per l'attuazione del method2 l'istanza dell'oggetto viene fatto riferimento utilizzando la variabile di questo. Questo tempo in cui method2 si chiama, non esiste alcuna eccezione e la proprietà un'istanza ha un valore di 40. Se sei a conoscenza di JavaScript e che hanno già istanziati pochi oggetti, quindi la sintassi precedente istanza sembra probabile un po 'strano. Il modo classico di istanziare un oggetto in JavaScript è il seguente:

MyObject function () () var cls = MyObject new ();

Questo approccio implica la definizione di una funzione in cui la funzione è un costruttore per l'oggetto di MyObject tipo. Quando i programmatori MyObject viene creata un'istanza, la notazione è molto simile a un'istanza di un tipo in Java e C #, e, pertanto, che istanziare tipi in JavaScript non è mai in discussione ciò che realmente accade. Una spiegazione più accurata di come un oggetto in JavaScript è definito è quando la variabile inst è stato utilizzato per istanziare un oggetto. In particolare, un oggetto è costruito mediante conversione di un funzione in un oggetto, e la funzione associata con la nuova parola chiave è il costruttore. Quando manipolare classi JavaScript, mantenere i seguenti punti in mente:

• E 'possibile creare tipi di JavaScript senza utilizzare la parola chiave new. Tuttavia, la creazione di JavaScript prime "oggetti", ha lo svantaggio di dover cross-reference "l'oggetto" istanza con la funzione.

• Gli oggetti JavaScript sono i tipi che si possono assegnare in modo dinamico, rendendo possibile la realizzazione di prototipi a base di programmazione, in cui il comportamento del tipo è determinato in fase di runtime.

• Ricette precedenza in questo articolo ha mostrato come manipolare oggetti funzione, una tecnica che si applica anche ai tipi di oggetto JavaScript.

• La base di tutti gli oggetti JavaScript è il tipo Object.

• Quando si utilizza la parola chiave new per istanziare un tipo, la proprietà prototype associato all'oggetto funzione può essere utilizzata per definire il comportamento che si applica a tutte le istanze di un tipo particolare.

un articolo presentato da Sonja Lande


Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni.
Importante: Questo articolo "Definizione e classi estensione" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.


Online: 231 users browsing the articles directory   


  

|