gpt4 book ai didi

javascript - Firebase 的通用 Javascript 代理

转载 作者:行者123 更新时间:2023-11-29 10:48:29 27 4
gpt4 key购买 nike

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

最佳答案

我想最后我自己解决了。

var FirebaseProxy = function(classToProxy, firebaseRef) {
var key,
self = this;

self.proxy = classToProxy;
self.firebaseRef = firebaseRef;

for (key in self.proxy.prototype) {
if (typeof self.proxy.prototype[key] === 'function') {
(function(inner_key) {
self[inner_key] = function ()
{
var args = arguments;

self.firebaseRef.once('value', function(data) {
var proxiedInstance = new self.proxy();

if (typeof proxiedInstance.init === 'function') {
proxiedInstance.init(self.firebaseRef, data.val());
}

proxiedInstance[inner_key].apply(proxiedInstance, args);
});
}
})(key);
}
}
}

关于javascript - Firebase 的通用 Javascript 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14756024/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com