javascript - Immutable.js 记录中的惰性计算属性?

标签 javascript immutable.js

是否有一种标准方法可以在 Record 上定义惰性计算属性?当我访问计算属性时,它应该运行一个函数来计算值,然后缓存该值。例如,像这样的东西:

const UserRecord = Record({
  firstName: '',
  lastName: '',
  get fullName() {
    console.log('Ran computation');
    return `${this.firstName} ${this.lastName}`;
  },
});

const user = new UserRecord({ firstName: 'Mark', lastName: 'Zuck' });
console.log(user.fullName); // Ran computation\nMark Zuck
console.log(user.fullName); // Mark Zuck

我能得到的最接近的方法是定义一个 getFullName() 方法,然后手动记住计算值。即:

getFullName() {
  if (!this._fullName) {
    this._fullName = `${this.firstName} ${this.lastName}`;
  }
  return this._fullName;
}

最佳答案

只要您不需要它来“重新计算”,我认为这应该可以做到。

const UserRecord = Record({
  firstName: '',
  lastName: '',
  get fullName() {
    console.log('Ran computation');

    var value = `${this.firstName} ${this.lastName}`;

    delete this.fullName;

    Object.defineProperty(this, 'fullName', {
        value: value
    });

    return value;
  },
});

const user = new UserRecord({ firstName: 'Mark', lastName: 'Zuck' });
console.log(user.fullName); // Ran computation\nMark Zuck
console.log(user.fullName); // Mark Zuck

关于javascript - Immutable.js 记录中的惰性计算属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49286418/

相关文章:

javascript - 为什么 window.onhashchange 在 IE7 兼容模式下工作?

javascript - Symfony Webpack Encore 与公司公共(public) bundle

javascript - 如何更新或添加到 immutable.js 列表

immutable.js - 不可变JS : Convert List to indexed Map

带有不可变 JS 的 Redux

javascript - 在同一元素中连接 2 个句子 ImmutableJS

javascript - Sencha 触摸 : toolbar with buttons auto height

javascript - 当文本框值不为空时如何隐藏按钮

javascript - 无法使用jquery读取属性值

javascript - 使用 ImmutableJS 更新映射列表中的一个键