1

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


1)

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

控制台.log(xy);

> 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 
4

2 回答 2

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);
于 2013-03-08T22:36:36.240 回答
1

x.y并且this在这一点上是未定义的undefined。我的意思是,当您创建一个匿名对象时,它直到关闭才真正存在}

因此,实现您想要的另一种方法是:

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

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

这样,ab变量是在之后设置的,x并且y都已初始化,因此x.y.a现在已设置。

如果您真的想在初始化期间设置 xyab,那么您需要使用函数和闭包更正式地进行设置。类似于以下内容。

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'
于 2013-03-08T22:38:02.373 回答