Definire i metodi get e set su un Object
. In realtà potrebbe essere definito solo sull'oggetto dashboard
e solo i suoi discendenti, ma è facile da fare.
Object.prototype.get = function(prop) {
this[prop] = this[prop] || {};
return this[prop];
};
Object.prototype.set = function(prop, value) {
this[prop] = value;
}
Scorrere proprietà nidificate utilizzando questo metodo get()
e chiamare set()
ogni volta che un valore deve essere impostato.
var dashboard = {};
dashboard.get('pages').get('user').set('settings', 'oh crap');
// could also set settings directly without using set()
dashboard.get('pages').get('user').settings = 'oh crap';
console.log(dashboard); // {pages: {user: {settings: "oh crap"}}};
Si potrebbe anche estendere/modificare il metodo get
per accettare le proprietà nidificate come singoli argomenti o un array o una stringa. Usando questo, si avrebbe solo chiamare ottenere una volta:
// get accepts multiple arguments here
dashboard.get('pages', 'user').set('settings', 'something');
// get accepts an array here
dashboard.get(['pages', 'user']).set('settings', 'something');
// no reason why get can't also accept dotted parameters
// note: you don't have to call set(), could directly add the property
dashboard.get('pages.user').settings = 'something';
Aggiornamento:
Dato che il metodo get genericamente restituisce un oggetto e non sa se avete bisogno di un array o qualche altro tipo di oggetto, in modo da dovrebbe specificare che voi stessi:
dashboard.get('pages.user').settings = [];
allora si potrebbe spingere gli elementi alla matrice impostazioni come
dashboard.get('pages.user').settings.push('something');
dashboard.get('pages.user').settings.push('something else');
Per fare in modo che la funzione get costruisca la gerarchia di oggetti da una stringa specifica come pages.user, è necessario suddividere la stringa in parti e verificare se esiste ogni oggetto nidificato. Ecco una versione modificata di get
che fa proprio questo:
Object.prototype.get = function(prop) {
var parts = prop.split('.');
var obj = this;
for(var i = 0; i < parts.length; i++) {
var p = parts[i];
if(obj[p] === undefined) {
obj[p] = {};
}
obj = obj[p];
}
return obj;
}
// example use
var user = dashboard.get('pages.user');
user.settings = [];
user.settings.push('something');
user.settings.push('else');
console.log(dashboard); // {pages: {user: {settings: ["something", "else"] }}}
// can also add to settings directly
dashboard.get('pages.user.settings').push('etc');
dispiace - la la sceneggiatura non ha senso per me. L'uso degli indicizzatori di parentesi implica il desiderio di indicizzare dinamicamente l'oggetto, ma si utilizzano costanti. Ciò, combinato con l'affermazione che "non vuoi fare il lavoro", mi chiede se tu sappia cosa stai cercando di realizzare. Non cercare di denigrare - solo un'osservazione sul motivo per cui potresti non ottenere la risposta che stai cercando. –