删除和重新连接属性映射到javascript对象的函数
-
23-12-2019 - |
题
我有一个现有的客户端应用程序,它使用JavaScript对象看起来像这样的东西:
var myObject = {
Id: 1,
Name: 'Foo',
Property1: 123,
Property2: 'ABC',
MyMethod: function() { ///do something },
MyMethod2: function() { /// do something else }
};
.
我现在希望尝试使用Firebase等服务持续这些对象。Firebase不喜欢包含函数的属性,所以我想知道是否有一个“简单”的方式在保存Firebase时剥离违规函数,然后在检索时重新连接它们,而无需创建每个副本对象。
解决方案
相当常见的模式是具有附加的相关函数的构造函数,并且具有该构造函数接受它用于填充自己的对象的原始版本以及“toraw”或类似功能给你原始副本。
例如:
function Thingy(raw) {
var name;
for (name in raw) {
if (raw.hasOwnProperty(name)) {
this[name] = raw[name];
}
}
}
Thingy.prototype.MyMethod = function() { /* ... */ };
Thingy.prototype.MyMethod2 = function() { /* ... */ };
Thingy.prototype.toRaw = function() {
var raw, name, value;
for (name in this) {
if (this.hasOwnProperty(name)) {
value = this[name];
if (typeof value !== "function") {
if (value.toRaw) {
raw[name] = value.toRaw();
} else {
raw[name] = this[name];
}
}
}
}
};
.
然后在保存到Firebase时:
write(myObject.toRaw());
.
......从Firebase读取时:
var obj = new Thingy(read());
.
更复杂的处理将涉及将备忘录放在原始对象上,告诉您对象的属性之一是,使用此模式,所以您知道要调用它的构造函数而不是仅复制它。(鹰眼将注意到上面的示例是断言,它允许在toRaw
中序列化时的属性上的toRaw
,但在Thingy
中的反序列化时不存在。)
不隶属于 StackOverflow