在声明对象时访问属性?

时间:2013-03-08 22:31:31

标签: javascript object

我正在尝试从当前值的父级访问值,但没有成功。我有这2个示例javascript代码来演示我的问题:


1)

var x = {
    y : {
        a : "a",
        ab : this.a + "b"
    }
};

的console.log(x.y格式);

> Object {
    a : a,
    ab : undefinedb
}

2)

var x = {
    y : {
        a : "a",
        ab : x.y.a + "b"
    }
};

console.log(x.y); // Uncaught TypeError: Cannot read property 'y' of undefined 

2 个答案:

答案 0 :(得分:2)

使用文字时,除非执行定义这些变量的语句,否则不能这样做。

一个好方法是:

var x = {};

x.a = 'hey';

x.b = x.a + ' how you doing?';

alert(x.b);

或更紧凑:

var x = {
    a: 'hey'
};

x.b = x.a + ' how you doing?';

alert(x.b);

答案 1 :(得分:1)

x.ythis未定义,因为它们是undefined。我的意思是,当你创建一个匿名对象时,它在结束}之前并不存在。

实现你想要的另一种方式是:

var x = {
     y : {a : "a"}
}

x.y.ab = x.y.a + "b"

这样ab变量在xy都被初始化后设置,因此x.y.a现已设置。

如果你真的想在初始化期间设置x.y.ab,那么你需要更正式地使用函数和闭包。如下所示。

var x = function(){
  this.a = 'foo';
  this.b = this.a + ' bar';
}() // Immediate function call so I don't have to create it.

console.log(x.b); // logs 'foo bar'