【问题标题】:Accessing Object's Data Via Another Variable Name通过另一个变量名访问对象的数据
【发布时间】:2013-05-14 12:33:48
【问题描述】:

太晚了,我现在脑子一片空白,但是假设我有变量filename,它正在存储另一个变量marker的名称。变量marker 是一个数组,包含对象和属性position: new google.maps.LatLng(42.2550,-114.3221)

我一直愚蠢地试图通过filename.position 访问它,这当然返回未定义,因为它正在搜索文字filename 以寻找不存在的“位置”属性。

但是我如何使用filename 拉动marker.position?是否有一些漂亮的 jQuery 技巧用于,呃,将变量“解析”到其内容?我脑筋急转弯。我知道我以前做过。

【问题讨论】:

  • 使用括号表示法:例如window[filename].postion
  • @apsillers 它filename被全局定义的情况下起作用。
  • @VisioN 是的,这正是我说“例如”的原因——这是一个如何使用括号表示法访问window 属性的示例。当然,一个完整的答案将解释如何避免全局变量(例如,对象命名空间)的更大上下文,但语法是相同的。
  • 上帝,是的,谢谢。我是智障。

标签: javascript jquery arrays variables


【解决方案1】:

如果可以在您的脚本中,您不仅可以将数据存储在变量中,还可以存储在某个对象的属性中(通常使用全局属性更方便)。 例如

var myObj = {};
myObj.marker = new google.maps.LatLng(42.2550,-114.3221); // or anything else

然后您将能够使用如下变量获取此属性:

myObj[filename].position

在这种情况下,我还建议使用typeof 结构检查myObj[filename] 的存在性,以确保myObj 中存在此类属性。

if (typeof myObj[filename] !== "undefined") {
  // do something
}

正如 apsillers 所说,您也可以为此使用全局 window 对象。但是,如果您的 marker 变量是在其他函数中定义的(即 不是全局的),您将无法使用 window.markerwindow[filename] 访问它因为它将超出范围。

第二种方法是使用 eval() 函数,我强烈建议避免

【讨论】:

  • 不幸的是,我的变量在另一个函数中是本地的。然后我想在一个单独的 jQuery 函数中访问它,所以我必须使用window 去全局。如果我有远见,这一切都不是必需的。不知道如何在不使用全局变量的情况下对其进行协调,而且我不愿意对随机数进行完全重写。无论如何,还是谢谢!
【解决方案2】:

试试这个:

window[filename].position;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 2019-01-26
    • 2017-10-01
    • 1970-01-01
    • 2014-12-20
    • 2014-04-25
    相关资源
    最近更新 更多