Puoi ottenere lo stesso comportamento da Javascript, con l'avvertenza che Javascript non è un linguaggio tipizzato, che riduce le tue opzioni di modellazione.
Un concetto che rende i tuoi modelli C # MessageBase<T>
e LogonRequest
possibili è il concetto di classi che è incorporato nel linguaggio. A differenza di C #, vanilla Javascript non ha un concetto di classe, e anche in ES6 con la parola chiave class
, paga per capire le differenze semantiche tra l'ereditarietà del prototipo di Javascript e la classe di un linguaggio orientato agli oggetti di prima classe.
In primo luogo, un esempio di sintassi di quei modelli che utilizzano pre-ES6 Javascript:
function Message(id, type, list) {
this.id = id;
this.type = type;
if('undefined' === typeof(list)) {
this.message = [];
} else { this.message = list; }
}
function LogonRequest(userName, password) {
this.userName = userName;
this.password = password;
}
var logonRequest = new LogonRequest('user', '123');
var messageObj = new Message(123456789, 'Logon', logonRequest);
var message = JSON.stringify(messageObj);
Nell'esempio sopra, le funzioni LogonRequest
e Message
sono chiamate "il costruttore" di quelle classi, e il this
all'interno di quelle funzioni è il contesto this
che è posto dove la funzione è chiamato (controlla una spiegazione pertinente per maggiori informazioni su come funziona this
). Ciò rende importante l'utilizzo della parola chiave new
, come avviene nelle seguenti righe, che crea un nuovo contesto oggetto a cui si applica this
.
ES6 migliora in qualche modo questa sintassi, dandoci il seguente modulo equivalente:
class Message {
constructor(id, type, list) {
this.id = id;
this.type = type;
if('undefined' === typeof(list)) {
this.message = [];
} else { this.message = list; }
}
}
Ma il suo uso e i suoi meccanismi interni sono esattamente gli stessi di sopra.
Vale la pena notare che alcuni sviluppatori non amano questo aspetto di Javascript e preferiscono un'espressione sintattica più strongmente tipizzata come fornisce C #. Questo è ciò che spiega l'avvento di un certo numero di lingue che traspongono in Javascript, in particolare Typescript, che consente una sintassi molto simile in semantica al tuo esempio in C #.