【问题标题】:Accessing Global object of an object in Javascript function在Javascript函数中访问对象的全局对象
【发布时间】:2011-11-18 11:04:02
【问题描述】:

我有一个具有以下结构的全局对象 abc

abc = {
    dir_content: {
        dir: [
            "hi"
        ]
        files: [
            "1.txt",
            "2.txt"
        ]
    }
    directory: "greeting"
}

希望我的符号正确。

dir_content 的值由 abc.dir_content = data; 从 JSON 对象传递

我有如下功能

function show_dir() {
    console.log(abc.dir_content.dir);
    console.log(abc.directory);
}

我期待console.log(abc.dir_content.dir) 向我表示你好。但它说它是未定义的。 console.log(abc.directory) 显示问候语就好了。

添加:我可以在控制台中使用 console.log(abc.dir_content.dir) 打印正确的结果。但是在函数中调用时会显示未定义。

我需要遍历函数中的目录和文件数组。但现在我坚持让 js 读取函数中的值。

编辑:我发现我的全局对象声明有问题。小提琴链接http://jsfiddle.net/xh5YH/。匿名函数声明有什么问题?

【问题讨论】:

  • 您的符号实际上没有多大意义。 dir 应该是一个数组吗?
  • 这显然意味着 abc.dir_content 的值没有设置。尝试记录 abc.dir_content 以查看 JSON 对象中的值是否已设置
  • 好吧..我不擅长记谱法。无论如何, abc 是一个全局对象。 dir_content 是 abc 的一个属性,它带有一个带有数组的 JSON 对象,即 dir 和 files。添加...我可以在控制台中毫无问题地读取全局对象。但是,在函数中传递的相同命令返回错误。

标签: javascript json object scope global


【解决方案1】:
abc = {
    dir_content: {
        // array of one dir
        dir: [ "hi" ], 
        // array of two files
        files: [
            "1.txt",
            "2.txt"
        ]
    },
    directory: "greeting"
}

【讨论】:

  • 不客气,通过点赞和接受答案表示感谢 :)
  • 赞成,但这并不能真正回答我的问题。在我原来的帖子底部放了一个小提琴链接。我不确定为什么声明全局对象的匿名函数不起作用。
【解决方案2】:
dir_content: {
    dir: {
        key: "hi"
    },
    files: {
        key1: "1.txt",
        key2: "2.txt"
    }
}

注意[](){}之间的区别

[] 表示您正在创建一个数组,但您需要一个对象,因此需要 {} 括号。 此外,返回的 dir_content 结构不正确。对象的结构总是这样的:

{ key: 'content' }

这就是为什么我在返回的数据中添加了 key、key1 和 key 2。如果您设法正确地构建数据,那么一切都会正常进行。

【讨论】:

  • 为什么投反对票?要访问返回数据的内容,它需要像我发布的代码那样进行结构化。
  • 目录和文件是数组。好的..让我添加键。
  • 如果它们是数组,则不必添加键。在看到您对数组的评论之前,我刚刚发布了代码;)
猜你喜欢
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 2014-10-14
相关资源
最近更新 更多