Le mappe JavaScript (il tipo di dati, non il metodo dell'array) sembrano configurate per accettare dati (coppie chiave / valore) ma non necessariamente metodi. Almeno non sono pubblicizzati in questo modo. Tuttavia, possiamo mettere i metodi su un'istanza di mappa. Curiosamente, la parola chiave this
funziona in tali metodi e restituisce la mappa stessa. Ad esempio:
const m = new Map();
m.set('key1', 'value1');
m.get('key1'); // returns 'value1', i.e. standard map usage
m.methodA = function(x) {console.log(x + ' to you too');};
m.methodA('hello'); // shows 'hello to you too'
m.methodB = function() {console.log(this.get('key1'));};
m.methodB(); // shows 'value1'
Questo è un uso corretto di mappe e / o metodi all'interno di mappe e / o this
all'interno di metodi all'interno di mappe? O sto corrompendo qualcosa in qualche modo o infranto alcune regole facendo questo? Sembra abbastanza semplice e ragionevole, mi fa pensare che dovrebbe andare bene, ma non ho mai visto o sentito nulla prima che mi renda nervoso.
Non riesco a creare una mappa con un costruttore nel modo in cui posso creare un oggetto con un costruttore. Tuttavia, posso creare una fabbrica di mappe per produrre mappe di un determinato "tipo". Ad esempio, posso usare una fabbrica per creare mappe del "tipo di auto". Posso quindi anche allegare i metodi a ciascuna mappa di questo "tipo" includendoli in fabbrica:
const createCarMap = function(features) {
const carMap = new Map(features);
carMap.set('# tires', 'four (assumed)');
carMap.speakersAreFeatured = function() {
return this.has('speakers');
};
return carMap;
};
const yourCar = createCarMap([
['# cylinders', 'twelve'],
['speakers', 'awesome']
]);
const myCar = createCarMap([
['exterior', 'pearly white']
]);
yourCar.speakersAreFeatured(); // returns true
myCar.speakersAreFeatured(); // returns false
Tuttavia, tale metodo verrà applicato ripetutamente per ogni mappa prodotta. Ciò è in contrasto con il modo in cui i metodi possono essere aggiunti al prototipo di un oggetto, consentendo la riutilizzabilità del metodo. Quindi, i metodi possono essere collegati a una mappa in modo da consentire la riutilizzabilità del metodo?
La mia domanda più generale è: dovremmo usare metodi sulle mappe. Se é cosi, come? Dovremmo pensarci e usarli essenzialmente nello stesso modo in cui facciamo con gli oggetti, o ci sono "nuove regole" per utilizzarli con le mappe? (Suppongo che si possano fare domande simili anche su altri tipi di dati new-ish, ad esempio insiemi, weakMaps, ecc., Ma qui mi limiterò alle mappe.)