Javascript 为什么可以';在对象声明中为下列属性指定属性值吗?

Javascript 为什么可以';在对象声明中为下列属性指定属性值吗?,javascript,object,properties,Javascript,Object,Properties,我正在学习Javascript,我遇到了一些我不懂的东西。这是我的目标代码的一部分: var monster = { ... //is the animation starting? hiding: true, delayDuration: Math.floor(Math.random() * 60), currentDelay: this.delayDuration, ... }; 如果I console.log(delayDuratio

我正在学习Javascript,我遇到了一些我不懂的东西。这是我的目标代码的一部分:

var monster =
{
    ...

    //is the animation starting?
    hiding: true,
    delayDuration: Math.floor(Math.random() * 60),
    currentDelay: this.delayDuration,


    ...
};
如果I console.log(delayDuration)我得到一个值,但是如果I console.log(currentDelay)它表示“未定义”

我不明白为什么currentDelay不取delayDuration的值。 有人能解释一下吗

编辑:@Bergi为什么将此标记为重复?我在别的地方找不到我的问题的答案
编辑2:是的,是复制品。至少现在我知道了我所要求的词语。

在对象创建时,
怪物和它的任何属性都没有定义。您不能使用来自正在构造的同一对象的变量


另外,Javascript使用函数作用域,这意味着
this
的值要么是
窗口
对象,要么是使用
new
(或其他实例创建技术)创建的最近实例的作用域。

this
在您创建的对象所在位置不存在(根据Bergi的apropos更正)。我一直认为这非常有用。因为this.delayDuration可能不存在。“this”不是指monster对象,它指的是代码运行的上下文,并且可能没有delayDuration属性。这不是javascript“this”的一个特性例如,这种代码在C语言中也不起作用。@JeremyMiller:始终存在一个
this
。只是它不指向对象(它还不存在)@Bergi是的,当然你是对的!谢谢你的更正。我已经编辑了评论。正如Jamie正确地说的,你不能使用来自你正在构造的同一个对象的变量。尝试下面的方法var monster={…hiding:true,delayDuration:Math.floor(Math.random()*60),currentDelay:Math.floor(Math.random()*60),…};因为您希望delayDuration和currentDelay具有相同的值!不完全正确。
monster
本身尚未定义。
几乎不是函数。谢谢Bergi,我正在更新我的答案。