私が持っているデータは、オブジェクトを格納するFirebaseの場所への参照であるため、プロキシクラスを使用していますが、オブジェクト自体を持っているかのように振る舞いたいです。うまく機能するものがありますが、それを改善したいと思います。重要な基準は繰り返しを減らすことです。Map クラスを調べて apply() を使用することで何かが可能であると思われますが、それを行う方法がよくわかりません (または、より良い解決策があるかどうか)。
Map クラスだけでなく、任意のクラスをサポートするようにソリューションを一般化できれば、それも役立つと思います。
var Map = function() {
...
};
var MapProxy = function(mapRef) {
this.mapRef = mapRef;
};
Map.prototype.addToken = function(portrait, newLocation) {
...
};
Map.prototype.removeToken = function(token) {
...
};
Map.prototype.moveToken = function(token, newLocation) {
...
};
MapProxy.prototype.addToken = function(portrait, newLocation) {
var mapRef = this.mapRef;
mapRef.once('value', function(data) {
var map = new Map();
map.init(mapRef, data.val());
map.addToken(portrait, newLocation);
});
};
MapProxy.prototype.removeToken = function(token) {
var mapRef = this.mapRef;
mapRef.once('value', function(data) {
var map = new Map();
map.init(mapRef, data.val());
map.removeToken(token);
});
};
MapProxy.prototype.moveToken = function(token, newLocation) {
var mapRef = this.mapRef;
mapRef.once('value', function(data) {
var map = new Map();
map.init(mapRef, data.val());
map.moveToken(token, newLocation);
});
};
var mapProxy = new MapProxy(mapRef);