当将数组定义为 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
看来我只保护了属性(property)分配。
有什么方法可以防止像 Array.push()
这样的东西修改我的“不可写”数组?
最佳答案
Object.seal()
似乎有效。
'use strict';
var global = Object.create(Object.prototype, {
names: { value: Object.seal(['Barney', 'Trogdor']) }
});
global.names.push('Jackson'); // >> TypeError: global.names.push(...) is not extensible
<小时/>
编辑:实际上,没关系。
在前面的示例中,我是否要附加以下代码行:
global.names[0] = 'Jackson'; // Still works
我相信 Object.freeze()
是我真正想要的。
var global = Object.create(Object.prototype, {
names: { value: Object.freeze(['Barney', 'Trogdor']) }
});
global.names.push('Jackson'); // >> TypeError: global.names.push(...) is not extensible
global.names[0] = 'Jackson'; // >> TypeError: 0 is read-only
global.names = ['Jackson']; // >> TypeError: "names" is read-only
关于javascript - ES5 定义不可更改的数组/属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451681/