2015-05-10 5 views
7

Ich möchte einige Informationen über Energiequellen speichern, die ich ernte. Idealerweise würde ich mySource.memory.taken verwenden, aber Source hat keine Speichereigenschaft.Source-Prototyp erweitern, um ein Speicherobjekt zu haben

Ich könnte so etwas wie dies umzusetzen:

Source.prototype.memory = function() { 
    return Memory.sources[this.id]; 
} 

Aber kann ich die gleiche Sache wie eine Eigenschaft wie andere Objekte im Spiel eher als eine Methode implementieren? Oder gibt es einen besseren Ansatz als das?

Antwort

10

Ja, Sie können. Sie müssen Getter/Setter interface mit Object.defineProperty implementieren. Hier ist die komplette Lösung basierend auf dem vorhandenen Spielecode:

Object.defineProperty(Source.prototype, 'memory', { 
    get: function() { 
     if(_.isUndefined(Memory.sources)) { 
      Memory.sources = {}; 
     } 
     if(!_.isObject(Memory.sources)) { 
      return undefined; 
     } 
     return Memory.sources[this.id] = Memory.sources[this.id] || {}; 
    }, 
    set: function(value) { 
     if(_.isUndefined(Memory.sources)) { 
      Memory.sources = {}; 
     } 
     if(!_.isObject(Memory.sources)) { 
      throw new Error('Could not set source memory'); 
     } 
     Memory.sources[this.id] = value; 
    } 
}); 
Verwandte Themen