对象初始化器中的自执行功能无法查看对象的属性

时间:2014-04-14 09:21:23

标签: javascript

我知道功能范围,自动执行功能,提升和其他很酷的词,但我完全是以下为基础。

var o = {
    a : 1,
    f : (function(){
      console.log(this.a);
    })()
};

为什么这会给我undefined?当对象初始化时,函数是自行执行的,因此我希望它已经指定为1.但是它没有这样做。

2 个答案:

答案 0 :(得分:3)

该函数不是在新创建的对象的范围内调用,而是在全局范围内调用。在那里,a(或window.a)确实是undefined。大括号本身不会创建新块。只有在您稍后调用某个方法时,this才会被假设为o。与此相比:

var o = {
    a : 1,
    f : function(){
      console.log(this.a);
    }
};
o.f(); // console prints 1

答案 1 :(得分:2)

由于您未通过o进行调用,因此this不是o

此外,您永远不会将该功能赋予任何功能 - f设置为返回值(undefined)。