变量可以使用const,来使变量不更改。但是const对于对象来说仅仅是保持着对象名和值之间链接保持不变。是可以改变对象的属性值的。
但是对象的属性如何确保不更改呢。
js中有一个函数Object.freeze()可以确保对象的属性不变化,但是如果对象内的属性还是对象呢,就望尘莫及了。这时候需要深拷贝的帮助了
function deepFreeze(obj) {
var propNames = Object.getOwnPropertyNames(obj);
propNames.forEach(function(name) {
var prop = obj[name];
if (typeof prop == 'object' && prop !== null) {
deepFreeze(prop);
}
});
return Object.freeze(obj);
}
又在想Object.freeze()是如何实现的呢?
我想应该是Object.property(obj, key, {})来进行设置writable:false来设置不可更改的。然后扩展一下Object.seal(obj)可以使对象无法扩展。