当指定为对象属性时,IIFE如何影响其中的此关键字

时间:2018-05-13 11:24:24

标签: javascript jquery angular reactjs web

var a={
   name:"Rhona",
   check:(function(){
          return this.name;
            })();
   }
 console.log(a.check)// This returns ""

一个空字符串我希望它返回Rhona,它没有给出undefined或null但是这里有一个空字符串?

我还想知道为什么当我访问不存在的对象属性时,它给出undefined而不是给定未定义我识别undefined是在创建阶段赋予变量的值,执行阶段然后初始化值因此,如果没有初始化它保持未定义,所以当我访问一个对象属性时,让我们说一个不存在的a.lastname不应该没有定义java脚本,为什么它会给出undefined呢?

2 个答案:

答案 0 :(得分:1)

立即执行IIFE(这是第一个“I”¹)。由于您在没有做任何特别设置this的情况下调用它,this默认为全局对象(在松散模式下)或undefined(在严格模式下)。 (见How does the “this” keyword work?

你基本上是这样做的,但没有临时变量:

var temp = (function() {
    return this.name;
})();
var a = {
    name: "Rhona",
    check: temp
}
console.log(a.check) // This returns ""

您获得""而非undefined的原因是您使用的是宽松模式,因此this指的是全局对象,即浏览器上的窗口,以及window有一个name属性(当前窗口的名称),通常为空("")。

¹“IIFE”中的第一个“I”是“内联”或“立即”,具体取决于您的要求。 :-)例如,“内联调用函数表达式”或“立即调用函数表达式”。

答案 1 :(得分:0)

您可以使用getter来实现您想要的内容:

var a={
   name:"Rhona",
   get check(){
          return this.name;
            }
   }