我应该只对具有函数的对象使用不变性吗?

Should I use immutability for objects with functions only?

我在我的项目中使用 Immutable.js 并尽量不使用纯 JS 结构。

但我不确定将仅包含函数的对象转换为不可变对象是否有意义。

假设我有 MathUtility.js:

export default {
  sum (a, b) {
    return a + b
  },
  min (a, b) {
    return a - b
  }
 //etc. More utils methods
}

做这样的事情是否有意义:

export default Immutable.fromJS({
  sum (a, b) {
    return a + b
  },
  min (a, b) {
    return a - b
  }
 //etc. More utils methods
})

从我的 POV 来看,它不是数据对象(有时很难从 JS 中的函数中分离数据)所以没有必要这样做,但我不确定。

谢谢

不,我看不到将它们转换为不可变对象的任何价值。事实上,有一个相当大的缺点:你不能再直接调用这些实用函数。

使用您的示例:

var utils = Immutable.fromJS({
  sum (a, b) {
    return a + b;
  },
  min (a, b) {
    return a - b;
  }
});

utils.sum; // => undefined
utils.get('sum'); // => function
utils.get('sum')(1, 2) // => 3

恕我直言,这很尴尬。