使只读的对象包装器变得简单

时间:2018-11-16 14:56:03

标签: javascript

我使用以下代码为对象生成只读包装器

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;我必须保护对象以免出错。根据需要传递所包含数据的副本将很麻烦,因为每当业务逻辑有新要求时,都需要触摸和部署后端代码。

1 个答案:

答案 0 :(得分:-1)

sssstttttttt……有这个https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

但是您甚至无法向冻结的对象添加属性。

-意见部分-

老实说,我不确定您在做什么。您正在阻止自己的成熟。无论有什么因素,我都从未做到过,也不需要。因为对我来说,无论这样做是谁,都犯了一个与覆盖全局对象属性同样严重的错误。