我使用以下代码为对象生成只读包装器
function readOnlyObject(obj) {
return new Proxy(obj, {
defineProperty: function(obj, key, desc) {return;},
set: function(obj, prop, val) {return;},
deleteProperty: function(obj, prop) {return;},
get: function(obj, prop, receiver) {
if (obj[prop] instanceof Object) {
return readOnlyObject(obj[prop]);
}
return Reflect.get(...arguments);
}
});
}
这与外部威胁的安全性无关,而只是为了防止我和我的同事在路途中向自己开枪。是否有我忘记覆盖的代理功能,当代理对象传递并写入时可能会引起麻烦?
说明:有问题的对象传递给运行时生成的业务逻辑的代码-由非程序员以DSL格式编写,并转换为javascript;我必须保护对象以免出错。根据需要传递所包含数据的副本将很麻烦,因为每当业务逻辑有新要求时,都需要触摸和部署后端代码。
答案 0 :(得分:-1)
sssstttttttt……有这个https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
但是您甚至无法向冻结的对象添加属性。
-意见部分-
老实说,我不确定您在做什么。您正在阻止自己的成熟。无论有什么因素,我都从未做到过,也不需要。因为对我来说,无论这样做是谁,都犯了一个与覆盖全局对象属性同样严重的错误。