我正在使用代理类,因为我拥有的数据是对存储我的对象的 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);