我正在尝试从当前值的父级访问值,但没有成功。我有这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
答案 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.y
和this
未定义,因为它们是undefined
。我的意思是,当你创建一个匿名对象时,它在结束}
之前并不存在。
实现你想要的另一种方式是:
var x = {
y : {a : "a"}
}
x.y.ab = x.y.a + "b"
这样ab
变量在x
和y
都被初始化后设置,因此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'