这足以深度冻结任何类型吗?
function freeze(obj) {
if (typeof obj === 'object') {
Reflect.ownKeys(obj).forEach((key) => {freeze(obj[key])});
}
return Object.freeze(obj);
}
答案 0 :(得分:1)
没有。不幸的是,JavaScript仍然没有办法做到这一点。例如,Date
个实例无法冻结:
var dt = new Date(2016, 11, 27);
console.log(dt.getDate()); // 27
Object.freeze(dt);
dt.setDate(dt.getDate() + 1);
console.log(dt.getDate()); // 28

其他一些问题/说明:
typeof
会为您提供"function"
。Reflect.ownKeys
只会为您提供对象的拥有键,而不是其原型的键。因此,根据您对"深度冻结的定义,"在冻结它之前,您可能需要将继承的属性复制到该对象。