Javascript 中的恒定模式

Constant pattern in Javascript

ES5 发布之前,javascript 中的常量是如何实现的?

据我所知,没有 get/set 东西,没有 writable 属性,没有 const 字,没有 Object.freeze 东西,那怎么办我可以创建自己的常量,不能更改?

例如,Math.PI

How were constant such as Math.PI implemented in javascript before ES5 was released?

甚至 ES3 也知道 属性 属性 - 请参阅 the spec 中的第 8.6.1 节。有 ReadOnlyDontEnumDontDeleteInternal

事实上,对于 Math.PI 属性 规范说“这个 属性 具有属性 { DontEnum, DontDelete, ReadOnly }。

但是,可以(并且仍然可以)用另一个覆盖整个 Math 对象。

How I could make my own constant, which can't be changed?

你不能。没有办法使变量或对象不可变,因为你需要分别等到 ES6 (const) 和 ES5 (Object.freeze)。

开发人员纪律是防止常量被覆盖的全部原因。通常,风格指南包括它们的标准,例如全大写的名称。