我是否应该仅对具有函数的对象使用不变性?

时间:2017-07-25 17:15:44

标签: javascript immutability immutable.js

我在项目中使用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中的函数中不时分割数据)所以没有必要这样做,但我不确定。

由于

1 个答案:

答案 0 :(得分:1)

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

使用您的示例:

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

这非常尴尬的imho。