如何在对象中使用exists属性

时间:2013-07-02 07:46:47

标签: javascript

我正在尝试这个

var a = {
    "a" : "Hey",
    "b" : this.a + "!"
};

console.log(a.b);

==>"undefined!"

但如果我使用它,它可以正常工作。

var a = {};
a.a = "haha";
a.b = a.a + "!";

console.log(a.b);

==>"haha!" 

如何使用第一种方式使其正常工作?

3 个答案:

答案 0 :(得分:6)

this在Object文字的上下文中不存在。您必须写a.a而不是this.a。但是,在对象中定义的函数内部,this实际上是指对象本身。

这与JavaScripts引用环境有关。

答案 1 :(得分:5)

你做不到。

这就是在JavaScript中设计文字object declaration的方式;没有自我引用会起作用

所有对this的引用都是根据代码运行的范围解决的,如果您处于全局范围内,则默认为window

<强>更新

不使用新的getter和setter语法,你可以做两件事:

  1. 构建对象但省略具有自引用的属性;然后,追加他们。这也是你所做的。

  2. 将属性转换为函数:

    var a = {
        "a" : "Hey",
        "b" : function() { return this.a + "!"; }
    };
    
    console.log(a.b()); // "Hey!"
    
  3. 请谨慎使用此方法,因为更改a.a的值也会影响a.b()的输出。

答案 2 :(得分:2)

Ecmascript第5版介绍了一些不错的对象:Setter和getters。 在现代浏览器中,您可以使用getter method来获得所需的结果:

var a = {
    "a" : "Hey",
    get b(){ return this.a + "!" },
    set c(x){ this.a = x}
};

现在a.b会为您提供正确的结果Hey!

c的setter函数会导致正常作业a.c = "foo"实际将a.a设置为foo