📜  fireorm Firestore 不支持带有自定义原型的 JavaScript 对象 - Javascript (1)

📅  最后修改于: 2023-12-03 14:41:12.973000             🧑  作者: Mango

Fireorm Firestore 不支持带有自定义原型的 JavaScript 对象 - Javascript

Fireorm是一个专为Firestore设计的ORM(对象关系映射)库,它允许您使用JavaScript对象来操作Firestore数据库。然而,在使用Fireorm时,您需要注意Firestore不支持带有自定义原型的JavaScript对象。

Firestore是一个文档型数据库,它将数据存储为文档对象。这些文档对象是键值对的集合,其中键是字段名,值可以是任何Firestore所支持的数据类型,例如文本、数字、布尔值、地理位置等。由于Firestore的所有数据都存储在文档对象中,它需要将JavaScript对象映射到文档对象,并从文档对象中检索数据以返回JavaScript对象。在这个过程中,Firestore需要在JavaScript对象中使用内置的Object.prototype,以便能够正常地序列化和反序列化数据。

然而,如果您使用自定义原型来构造JavaScript对象,Firestore将无法正确地将这些对象映射到文档对象。这是因为当Firestore尝试将JavaScript对象序列化为文档对象时,它只会序列化对象中可枚举的属性,而您可能需要在自定义的原型中定义一些方法或属性。当对象被反序列化时,Firestore不能自动为其创建正确的原型,因此可能会导致错误。

以下是一个使用自定义原型的JavaScript对象的示例:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.greet = function() {
  console.log('Hello, my name is ' + this.name);
}

const john = new Person('John', 30);

如果您尝试将这个对象传递给Firestore,您可能会看到以下错误:

Error: Firestore doesn't support JavaScript objects with custom prototypes (i.e. objects that were created via the 'new' operator with a constructor function).

因此,在使用Fireorm时,请确保您的JavaScript对象没有自定义原型,并且在使用自定义类之前,请先将其转换为简单的纯对象。

const johnObject = { name: 'John', age: 30 };

这将确保您的数据可以正确地映射到Firestore文档对象,并且可以正常序列化和反序列化。

总结:

  • Firestore不支持带有自定义原型的JavaScript对象。
  • 在使用Fireorm时,请确保您的JavaScript对象没有自定义原型。
  • 在使用自定义类之前,请先将其转换为简单的纯对象。