gpt4 book ai didi

javascript - 保护闭包内的对象不被外部修改

转载 作者:行者123 更新时间:2023-11-30 17:21:32 25 4
gpt4 key购买 nike

我创建了这个对象,以便能够在其中存储数据,它具有一定程度的保护。只要新数据通过验证,任何人都可以获取它,任何人都可以设置它。

MF.factory = new function(){
var data = {
SITE_URL: document.URL.replace(/(https?:\/\/.+?)\/.*/, '$1'),
xhrSettings: {
type: 'GET',
error: function(){},
response: function(){},
max_upload_file_size: 8388608
}
}
this.get = function(key){
return data[key];
}
this.set = {
xhrSettings: {
type: function(type){if(type in {POST:0,GET:0,PUT:0}) data.xhrSettings.type = type;},
error: function(func){if(typeof func === 'function') data.xhrSettings.error = func;},
response: function(func){if(typeof func === 'function') data.xhrSettings.response = func;},
max_upload_file_size: function(size){if(!isNaN(size)) data.xhrSettings.max_upload_file_size = size;}
}
}
};

例如,现在我可以获得SITE_URL,但我无法设置它。这就是我正在寻找的限制。我可以设置 xhrSettings.type,只要它是 POST、GET 或 PUT。

MF.factory.set.xhrSettings.type("DGD"); // No effect
MF.factory.set.xhrSettings.type("POST"); // data.xhrSettings.type = "POST"

但是如果我这样做

a = MF.factory.get('xhrSettings');
a.type = "DGD";
console.log(MF.factory.get('xhrSettings'));

我看到 data 中的对象发生了变化,这使我的整个概念变得毫无用处。我该如何解决这个问题?

最佳答案

这正是 Object.freeze() 是为了。

来自 MDN:

The Object.freeze() method freezes an object: that is, prevents new properties from being added to it; prevents existing properties from being removed; and prevents existing properties, or their enumerability, configurability, or writability, from being changed. In essence the object is made effectively immutable. The method returns the object being frozen.

注意:IE v8 及以下版本不支持 Object.freeze()。

关于javascript - 保护闭包内的对象不被外部修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25062209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com