看起来很简单......
如果我在JavaScript处理程序中设置它:
var storage;
稍后我会检索一个属性的JSON字典,我想在storage
上设置它。我的字典看起来像这样:
{
"type": "foo",
"set_on_global": "storage",
"property_dict": {
"some": "thing",
"baz": "bam"
}
}
问题:
有没有办法使用set_on_global
在我的全局property_dict
变量上设置storage
对象,例如:
storage.property_dict = {
"some": "thing",
"baz": "bam"
};
谢谢!
修改:
当storage
不是全局但只保留在内存中时,如何做到这一点?
解: 所以这就是它的工作方式。它似乎只适用于setter方法,例如:
var setter = function (set_on, set) {
switch (set_on) {
case "storage":
storage.property_dict = set;
break;
}
}
不是一个大粉丝,因为它需要硬编码“存储”,所以也许还有另一种方式。
答案 0 :(得分:2)
喜欢这个?您始终可以从窗口对象访问全局变量。
window[json.set_on_global] = json.property_dict;
已编辑 - 已更新以回答跟进问题
这取决于您是否有权访问它。让我们说它是在一个类中定义的,它已暴露出来。然后你可以做同样的事情。
obj [json.set_on_global] = json.property_dict;
其中obj是该类的实例。
如果它是一个类中的私有变量,那么你需要暴露它或者有一个setter来实现这一点。
这就是你在问什么,对吧?
EDITED 2
您可以尝试在对象中存储存储空间。
var variables = {
storage: {}
};
var setter = function(instruction){
variables[instruction.set_on_global] = instruction.property_dict;
}
另一种方法是公开变量,这样你就可以这样(假设这是一个单例):
var Clz = function(){
var storage = {};
return {
storage: storage
}
}();
Clz[json.set_on_global] = json.property_dict;
这应解决您的硬编码问题。我不知道你想要创建什么样的课程,所以我想我给了你一个单例。
答案 1 :(得分:1)
以下是代码:
假设storage
是浏览器代码中的全局变量。它可以像window.storage
或window['storage']
var json = {
"type": "foo",
"set_on_global": "storage",
"property_dict": {
"some": "thing",
"baz": "bam"
}
}
var obj = window[json.set_on_global] = {}
obj.property_dict = json.property_dict
答案 2 :(得分:1)
首先,您必须将存储定义为全局
window.storage = {};
稍后,您获得了JSON,只需覆盖它
window.storage.property_dict = {
"some": "thing",
"baz": "bam"
}
答案 3 :(得分:1)
我不明白。你有全局storage
,为什么你不能用它来定义它的新属性?或者你不明白如何遍历JSON对象?
答案 4 :(得分:0)
我会反对它 - 你很容易受到跨脚本攻击。 封装还会建议您的服务器端脚本不应该知道客户端脚本的内部工作,并且数据不应该对它们进行说明。
所以最好的行动方案应该是使用类似的东西:
storage = json_decode(buffer);
如果您需要数据来指示哪个全局变量应该获取数据,请使用标识符代码和开关:
"set_on_global" : 1,
switch(buffer.set_on_global) {
case 1:
storage = buffer.property_dict;
}
(在我的脑海中,sintax可能会关闭)
你将拥有你的变量集。
编辑:另一个答案提出了一个比我下面写的更好的解决方案。