这足以深度卡住任何类型吗?
function freeze(obj) {
if (typeof obj === 'object') {
Reflect.ownKeys(obj).forEach((key) => {freeze(obj[key])});
}
return Object.freeze(obj);
}
最佳答案
没有。不幸的是,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
其他一些问题/注释:
- As Matías said ,函数是对象,但是
typeof
将为它们提供"function"
。 Reflect.ownKeys
仅提供对象的自己键,而不是其原型(prototype)的键。因此,根据您对“深度卡住”的定义,您可能需要在卡住对象之前将继承的属性复制到该对象。
关于javascript - 深度冷冻任何类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343535/