Ho guardato il video da this question on class-free OOP diverse volte e ho difficoltà ad applicarlo a un esempio reale.Come posso condividere la funzionalità "costruttore" nel nuovo modello di costruttore di Crockford?
di Crockford modello nuovo costruttore si presenta così:
function constructor(spec) {
let {member} = spec,
{other} = other_constructor(spec),
method = function() {
// accesses member, other, method, spec
};
return Object.freeze({
method,
other,
});
}
Dove spec
è un hash opzioni e l'oggetto risultante espone i metodi che chiudono su tutte le componenti interne. Ignorando la destrutturazione (come questo può essere fatto in forma lunga nell'attuale JS,) come posso applicare questo modello in un esempio reale?
Attualmente ho una libreria con una classe di base Module(model, id)
dove model
sono alcuni dati di avvio.
// constructor, original flavor
function Module(model, id) {
this.id = id;
this.model = model;
}
Ho poi hanno diversi sapori di moduli che ereditano da questo genitore Module
. Sotto modello di Crockford, vorrei invece avere questo come un "costruttore":
// constructor, Crockford's Cool Ranch
function module(spec) {
let id = spec.id,
model = spec.model;
return Object.freeze({});
}
Come faccio a usare modello di Crockford (che non sembra utilizzare l'ereditarietà a tutti, ma piuttosto la composizione di un oggetto da più fonti) a condividere questa costruzione di base tra più sapori dei moduli?
So che id
e model
diventeranno variabili locali nel "costruttore" di ciascun modulo; In sostanza, sto chiedendo come evitare di ripetere model = spec.model
per ciascun aroma del modulo usando il modello di Crockford.
Vorrei anche essere il primo a sottolineare qui che, in quell'altra domanda, ho avuto credito per una risposta che non capisco. :( – Mathletics
non puoi, stai mescolando le metafore qui, la 3a scatola non è come la 2a scatola, la terza restituisce un oggetto vuoto senza proto, la 2 restituisce un oggetto personalizzato con un proto e 2 possiede. crockford's restituisce un oggetto non proto con _n_: è come avere la semplicità del prototipo (ottenendo una serie di metodi contemporaneamente, in quel caso da _other_ invece di _prototype_), ma senza iterarli tutti come facciamo ora tramite extend() strumenti – dandavis
@dandavis So che nella seconda casella le proprietà sono esposte e nella terza sono private.Se ignoriamo completamente la seconda casella, la risposta è la stessa? Non c'è modo di evitare di ripetere il codice di configurazione necessario per assegnando membri privati in ciascun aroma del modulo? – Mathletics