#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を使用できるようにすることはできますか?
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 -strictモードでも、TypeErrorを再現できません。
@ SeanDunford-これは奇妙に思えます。 2.xで不変性を信頼できるかどうかはわかりません。
凍結またはdeepFrozenの場合でも、このオブジェクトが変更可能に見える理由を理解するのに役立ちます。
@ marwahaha -
OK、閉じて、Object.freezeが2.xのmoment
に対して機能しないと仮定します。