Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该只对具有函数的对象使用不变性吗?_Javascript_Immutability_Immutable.js - Fatal编程技术网

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

Javascript 我应该只对具有函数的对象使用不变性吗?,javascript,immutability,immutable.js,Javascript,Immutability,Immutable.js,我在我的项目中使用,尽量不使用普通的JS结构 但我不确定将只包含函数的对象转换为不可变的对象是否有意义 假设我有MathUtility.js: 这样做有意义吗 export default Immutable.fromJS({ sum (a, b) { return a + b }, min (a, b) { return a - b } //etc. More utils methods }) 从我的观点来看,在JS中不时地从函数中分割数据并不是一个困难的数

我在我的项目中使用,尽量不使用普通的JS结构

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

假设我有MathUtility.js:

这样做有意义吗

export default Immutable.fromJS({
  sum (a, b) {
    return a + b
  },
  min (a, b) {
    return a - b
  }
 //etc. More utils methods
})
从我的观点来看,在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

这真是太尴尬了。

如果这些只是像MathUtility中那样的帮助函数,那么我会说,您不需要不可变的。如果你想让人们以后更难更改你的实用程序对象,我想你可以使用冗余。我会分别导出每个函数。这将允许树扫描,并使绑定永久化。@marzelin如果我错了,请纠正我,但如果我单独导出动态函数名,我想我不能使用它们?我没有在示例中提到它,但这也是一个要点me@MikeMcCaughanAfaik Object.freeze可能会稍微降低性能,但更重要的是-为什么它比使用Immutable.fromJS更好实际上,在导入UTIL后,您可以使用.toJS,但一般来说,-我认为您是对的
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