在javascript中访问命名空间的对象属性

时间:2015-05-11 19:03:39

标签: javascript object

[更新]
给定对象:

var node = {
  'comments': 'http://example.com/post/#comments',
  'slash:comments': '143',
}

可以访问'标题'使用索引访问或点表示法的参数:

node["comments"]  // 'http://example.com/post/#comments'
node.comments     // 'http://example.com/post/#comments'

但是使用namespaced属性,只有索引访问可用:

node["slash:comments"]  // '143'
node.slash:comments     // javascript syntax error

javascript中有没有办法使用点表示法访问命名空间属性?

使用关联数组访问时,属性键可以是任何字符串值,但使用点表示法时仅限于变量名称语法,这似乎是不合适的 - 是否有W3C规范定义此内容?

[更新]
为何选择@Bergi?上面的对象是由XML到JSON库为以下XML(RSS2.0提要格式)生成的对象的一部分:

<slash:comments>143</slash:comments>
<comments>http://example.com/post/#comments</comments>

另一个库生成此对象,其中所有属性都可以通过点表示法访问。

'comments': [
  'http://example.com/post/#comments',
  {
    '__prefix': 'slash',
    '__text': '143'
  }
]  

有没有人知道是否有努力将XML转换为JSON标准化?什么是最广泛使用或可接受的库?

2 个答案:

答案 0 :(得分:0)

确实,你必须遵循JS点符号格式。在你的情况下:

var node = {
  'comments': 'http://example.com/post/#comments',
  'slash':{
      comments': '143'
   }
}
console.log(node.slash.comments);

我能找到最接近文档http://www.w3.org/wiki/Objects_in_JavaScript

的文件

答案 1 :(得分:0)

没有。您使用此表示法称为命名空间属性是什么,使用class User { var $name; } class UserRepository { private $type; public function __construct($Class) { ^^^^^^ this will be a string $this->type = $Class; } public function getInstance() { return new $this->type; } } $obj = new UserRepository('User'); ^^^^^^ send a string here var_dump($obj->getInstance()); ,它仍然只是一个字符串。由于:是JS上的特殊字符,因此您无法使用点表示法执行此操作。如果您使用:代替_来定义命名空间,则可以执行此操作。