將數組定義爲ES5樣式對象的屬性時,我想使其屬性的值無法更改。ES5定義不可更改的數組/屬性值
'use strict';
var global = Object.create(Object.prototype, {
names: {
value: ['Barney', 'Trogdor'],
writable: false
}
});
global.names.push('Jackson'); // I expected a read-only error here
console.log(global.names[2]); // >> Jackson
global.names = ['Ooga', 'Booga']; // >> TypeError: "names" is read-only
看來,我只是防止財產分配。
有什麼辦法可以防止像Array.push()
這樣的修改我的「不可寫」數組的東西?
我還需要覆蓋'.splice()'等,這是一個不利的解決方案。 – Jackson
是的,但Object.seal()雖然是一個很好的解決方案,[與IE有關]只適用於版本9+ 我想知道一個適當的解決方案。如果不支持此方法,也許是回退方法可能是覆蓋它們或僅提供對陣列的只讀訪問權限。 –
我在ES5的背景下提出這個問題,這意味着IE9 +。我不需要'Object.seal()'的回退。實際上,'.seal()'對我來說並不是很「語義」,因爲存在'writable:false'。 – Jackson