Loopbackjs Loopback.io中的属性设置器和获取器

Loopbackjs Loopback.io中的属性设置器和获取器,loopbackjs,setter,getter,strongloop,Loopbackjs,Setter,Getter,Strongloop,我想知道使用model类中的setter和getter属性有多安全 这已经在环回用户模型中使用,可以在此处看到: 为什么在任何地方都没有记录?我们可以使用它吗?我仍然在寻找“官方”文档,但我们的主工程师在另一个SO答案中记录了它: 如果我能在文档中找到官方支持,我会更新这个问题。事实上,经过更深入的挖掘,我发现这实际上是在环回数据源juggler模块的ModelBuilder类中使用和定义的。 它被定义为 ModelClass.setter={} 使用 所以它可能已经实现了,但没有文档记录…谢谢

我想知道使用model类中的settergetter属性有多安全

这已经在环回用户模型中使用,可以在此处看到:

为什么在任何地方都没有记录?我们可以使用它吗?

我仍然在寻找“官方”文档,但我们的主工程师在另一个SO答案中记录了它:


如果我能在文档中找到官方支持,我会更新这个问题。

事实上,经过更深入的挖掘,我发现这实际上是在环回数据源juggler模块的ModelBuilder类中使用和定义的。 它被定义为

ModelClass.setter={}

使用


所以它可能已经实现了,但没有文档记录…

谢谢您的回答!我已经看过了。我想知道是否有人能正式证实。。。无论如何,我会保留这个问题,直到它被完全证实。。
Object.defineProperty(ModelClass.prototype, propertyName, {
  get: function() {
    if (ModelClass.getter[propertyName]) {
      return ModelClass.getter[propertyName].call(this); // Try getter first
    } else {
      return this.__data && this.__data[propertyName]; // Try __data
    }
  },
  set: function(value) {
    var DataType = ModelClass.definition.properties[propertyName].type;
    if (Array.isArray(DataType) || DataType === Array) {
      DataType = List;
    } else if (DataType === Date) {
      DataType = DateType;
    } else if (DataType === Boolean) {
      DataType = BooleanType;
    } else if (typeof DataType === 'string') {
      DataType = modelBuilder.resolveType(DataType);
    }

    var persistUndefinedAsNull = ModelClass.definition.settings.persistUndefinedAsNull;
    if (value === undefined && persistUndefinedAsNull) {
      value = null;
    }

    if (ModelClass.setter[propertyName]) {
      ModelClass.setter[propertyName].call(this, value); // Try setter first
    } else {
      this.__data = this.__data || {};
      if (value === null || value === undefined) {
        this.__data[propertyName] = value;
      } else {
        if (DataType === List) {
          this.__data[propertyName] = DataType(value, properties[propertyName].type, this.__data);
        } else {
          // Assume the type constructor handles Constructor() call
          // If not, we should call new DataType(value).valueOf();
          this.__data[propertyName] = (value instanceof DataType) ? value : DataType(value);
        }
      }
    }
  },
  configurable: true,
  enumerable: true,
});