var a={
name:"Rhona",
check:(function(){
return this.name;
})();
}
console.log(a.check)// This returns ""
一个空字符串我希望它返回Rhona,它没有给出undefined或null但是这里有一个空字符串?
我还想知道为什么当我访问不存在的对象属性时,它给出undefined而不是给定未定义我识别undefined是在创建阶段赋予变量的值,执行阶段然后初始化值因此,如果没有初始化它保持未定义,所以当我访问一个对象属性时,让我们说一个不存在的a.lastname不应该没有定义java脚本,为什么它会给出undefined呢?
答案 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;
}
}