在ES5
發佈之前javascript
中如何實現常量?Javascript中的常量模式
目前還沒有get/set
的東西,沒有writable
財產,沒有const
一句話,沒有Object.freeze
的東西,據我所知,所以我怎麼能做出自己的常數,它不能被改變?
等,例如,Math.PI
在ES5
發佈之前javascript
中如何實現常量?Javascript中的常量模式
目前還沒有get/set
的東西,沒有writable
財產,沒有const
一句話,沒有Object.freeze
的東西,據我所知,所以我怎麼能做出自己的常數,它不能被改變?
等,例如,Math.PI
如何是恆定的,如ES5之前用JavaScript實現
Math.PI
被釋放?
即使ES3知道財產屬性 - 請參閱the spec中的第8.6.1節。有ReadOnly
,DontEnum
,DontDelete
和Internal
。
事實上,對於Math.PI
財產的規範說「此屬性的屬性{DontEnum,DontDelete,只讀}。」
然而,人們可以(而且還可以)覆蓋整個Math
物體另一個。
我怎樣才能使自己的常數,不能改變?
你不能。沒有辦法使變量或對象不變,因爲您需要分別等待ES6(const
)和ES5(Object.freeze
)。
開發者紀律是阻止常量被覆蓋的原因。通常,風格指南包括它們的標準,如全大寫的名稱。
謝謝!一直想着它 – DanilGholtsman
你只是*沒有修改你的變量...?通常通過使用所有大寫名稱非正式地「強制執行」。 – deceze
@deceze你確定嗎? – DanilGholtsman
返回原始值的函數也可以防止意外覆蓋。 – Bergi