我基本上只想知道是否存在一些標準方法來防止將方法/屬性添加到JavaScript對象中?防止將屬性添加到JavaScript對象
作爲一名C++程序員,看起來您可能會遇到很多令人頭痛的事情,試圖調試JavaScript代碼,因爲它允許您即時向對象添加屬性,特別是在大型代碼庫中。
我基本上只想知道是否存在一些標準方法來防止將方法/屬性添加到JavaScript對象中?防止將屬性添加到JavaScript對象
作爲一名C++程序員,看起來您可能會遇到很多令人頭痛的事情,試圖調試JavaScript代碼,因爲它允許您即時向對象添加屬性,特別是在大型代碼庫中。
有一種排序,ES5.1 Object.freeze
函數可以防止添加新的屬性,以及防止現有的屬性改變。
var o = {
a: 123
};
o.b = 456;
// Freeze the object.
Object.freeze(o);
// Log the object.
console.log(o);
// These do nothing, properties do not change and are not added.
o.b = 0;
o.c = 789;
// Log the object.
console.log(o);
話雖這麼說,JavaScript是一種超級動態語言,所以這樣做廣泛的可以看作是一個反模式。
如果凍結過於嚴格,其他選項包括Object.preventExtensions
和Object.seal
,具體取決於您希望防止的情況。
或者ES6 Proxy objects可以提供對可以添加或修改哪些屬性的更多控制。
不是。有可能的方法來配置你不希望能夠附加新屬性的對象,但沒有任何實用或標準化的東西。主要是一個JavaScript開發人員,我不認爲這是一個問題。我相信typescript會爲這個接口做些什麼,如果你開始附加它不期望的屬性,它會發出警告。很多javascript開發人員不是這樣的粉絲,但你可能想試一試https://www.typescriptlang.org/docs/tutorial.html
不,沒有。 –
嗯,那是JS的雅:-) – 1sloc
如果你真的只是試圖阻止或檢測到所有對象的錯誤的屬性名稱賦值(如你的意見中的建議)意外打字問題,那麼Javascript真的不支持,並且通常與您通常使用Javascript的方式不一致。正如其他地方所說的,你可以使用'Object.freeze()','Object.seal()',但這可能妨礙正常的對象操作。如果你渴望這個功能,那麼你可能更喜歡使用類似TypeScript的東西。 – jfriend00