Moment: 在 Object.freeze() 之后启用所有非变异功能

创建于 2016-01-14  ·  4评论  ·  资料来源: moment/moment

从#1754 的讨论中分离出@kruncher请求

我一直在时刻实例上使用 Object.freeze,这通常实现了我所需要的; 除了我刚刚发现以下失败:

let now = Object.freeze(moment());
if (now.isSameOrBefore(anotherTime)) { // throws exception
}

例外:

TypeError: Can't add property _isValid, object is not extensible
 at valid__isValid (C:\git\quick-test\node_modules\moment\moment.js:93:24)
 at Moment.moment_valid__isValid [as isValid] (C:\git\quick-test\node_modules\moment\moment.js:2195:16)
 at Moment.isSame (C:\git\quick-test\node_modules\moment\moment.js:1945:44)
 at Moment.isSameOrBefore (C:\git\quick-test\node_modules\moment\moment.js:1962:21)

可以修复这个问题,以便在需要时可以使用 Object.freeze 吗?

Help Wanted

所有4条评论

const moment = require('moment')
const today = Object.freeze(moment()); 
today.toString()
   => 'Tue May 02 2017 10:04:52 GMT-0400'
today.add(1, 'day')
   => moment("2017-05-03T10:04:52.889")
today.toString()
  => 'Wed May 03 2017 10:04:52 GMT-0400'

也许我遗漏了一些东西,但Object.freeze在最新版本中似乎对我根本不起作用。 我知道3.x对不变性有很大的推动作用,但与此同时,Object.freeze 是否具有可靠性? /

节点版本:6.10 (~lts)
时刻版本:2.18.1

@butterflyhug - 即使在严格模式下,我也无法重现 TypeError。

@SeanDunford - 这看起来很奇怪。 我不知道你是否可以相信 2.x 中的不变性。

我很想帮助理解为什么这个对象看起来是可变的,即使是 freeze 或 deepFrozen

@marwahaha - 我们现在已经切换到 Luxon。 当时我们还没有准备好使用 3.x。

好的,我将关闭并假设 Object.freeze 不适用于 2.x 中的moment s。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

slavafomin picture slavafomin  ·  3评论

benhathaway picture benhathaway  ·  3评论

tanepiper picture tanepiper  ·  3评论

alvarotrigo picture alvarotrigo  ·  3评论

4rg0n picture 4rg0n  ·  3评论