在声明对象时访问属性

Access properties while declaring object?

本文关键字:访问 属性 对象 声明      更新时间:2023-09-26

我试图访问当前值的父值,但没有成功。我有这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 

当使用字面量时,在定义这些变量的语句执行之前不能使用。

一个好的方法是:

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);

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'