【问题标题】:Access properties while declaring object?声明对象时访问属性?
【发布时间】:2013-03-08 22:31:30
【问题描述】:

我正在尝试从当前值的父级访问一个值,但没有成功。我有这 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 

【问题讨论】:

  • 您不能从声明对象字面量中引用该对象(从概念上讲,它尚不存在)。它必须分两步完成,或者通过使用函数和延迟评估来完成。

标签: javascript object


【解决方案1】:

当使用文字时,在定义这些变量的语句被执行之前,你不能这样做。

一个好办法是:

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

【讨论】:

    【解决方案2】:

    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'
    

    【讨论】:

      猜你喜欢
      • 2011-01-13
      • 1970-01-01
      • 2015-08-25
      • 2011-08-25
      • 2021-05-02
      • 1970-01-01
      • 2021-03-05
      • 2017-04-24
      • 1970-01-01
      相关资源
      最近更新 更多