如果内存中变量的名称通过 JSON 传递,则如何访问该变量



看起来很简单...

如果我在 JavaScript 处理程序中设置它:

 var storage;

稍后,我检索了一个属性的 JSON 字典,我想在 storage 上设置该字典。我的字典看起来像这样:

 {
   "type": "foo",
   "set_on_global": "storage",
   "property_dict": {
      "some": "thing",
      "baz": "bam"
   }
 }

问题:
有没有办法使用 set_on_global 在我的全局 storage 变量上设置property_dict对象,例如:

  storage.property_dict = {
    "some": "thing",
    "baz": "bam"
  };

谢谢!

编辑
storage不是全局但仅保存在内存中时,该怎么做?

解决方案:所以这就是它的工作原理。似乎它仅适用于二传手方法,例如:

var setter = function (set_on, set) {
 switch (set_on) {
   case "storage":
     storage.property_dict = set;
     break;
 }

}

不是大粉丝,因为它需要硬编码"存储",所以也许还有另一种方法。

像这样?您始终可以从窗口对象访问全局变量。

window[json.set_on_global] = json.property_dict;

已编辑 - 已更新以回答后续问题

这取决于您是否有权访问它。假设它是在类中定义的,并且它是公开的。然后你可以做同样的事情。

obj[json.set_on_global] = json.property_dict;

其中 obj 是该类的实例。

如果它是类中的私有变量,那么您需要公开它或有一个 setter 来实现这一点。

这就是你要问的,对吧?


已编辑 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;

这应该可以解决您的硬编码问题。我不知道您要创建哪种类,所以我想我给了您一个单例示例。

这是代码:

假设storage是浏览器代码中的全局变量。它可以像window.storagewindow['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

首先,您必须将存储定义为全局

存储
window.storage = {};

后来,你得到了一个JSON,只需覆盖它

window.storage.property_dict = {
    "some": "thing",
    "baz": "bam"
}   

我不明白。你有全局storage,为什么你不能用它来定义它的新属性? 还是您不了解如何遍历 JSON 对象?

我建议不要这样做 - 你很容易受到跨脚本攻击。封装还会建议服务器端脚本不应了解客户端脚本的内部工作原理,并且数据不应扩展它们。

因此,最好的行动方案应该是使用以下内容:

storage = json_decode(buffer);

如果需要数据来指示哪个全局变量应获取数据,请使用标识符代码和开关:

"set_on_global" : 1,
    switch(buffer.set_on_global) {
      case 1:
        storage = buffer.property_dict;
    }

(在我的脑海中,sintax可能已经关闭了)

您将设置变量。

编辑:另一个答案提出了比我在下面写的更好的解决方案。

相关内容

  • 没有找到相关文章

最新更新