我正在练习下面的代码 代码引用:Link
let obj = {
name : "Cj",
sayLater : function(){
setTimeout(function(){
console.log("sayLater :> "+this.name);
},3000)
},
sayNow : function(){
console.log("sayNow :> "+this.name);
},
sayLaterFA : function(){
setTimeout(() => console.log("sayLaterFA :> "+this.name) ,3000)
},
sayNowFA : () => console.log("sayNowFA :> "+this.name),
sayLaterPureFatArrow : () => { setTimeout(() => console.log("sayLaterPureFatArrow :> "+this.name),4000) },
sayNowPureFatArrow : () => { console.log("sayNowPureFatArrow :> "+this.name) }
}
obj.sayLater(); //Output : sayLater :> undefined
obj.sayNow(); //Output : sayNow :> Cj
obj.sayLaterFA(); //Output : sayLaterFA :> Cj
obj.sayNowFA(); //Output : sayNowFA :> Cj
obj.sayLaterPureFatArrow(); //Output : sayLaterPureFatArrow :> undefined
obj.sayNowPureFatArrow(); //Output : sayNowPureFatArrow :> undefined
任何人都可以解释一下为什么我使用胖箭头函数时输出未定义
最佳答案
这些箭头函数的 this
值是创建函数的上下文中的 this
值。这不是您正在构造的对象;它就是对象初始值设定项代码所在的 this
所在的位置。
换句话说,在里面
let obj = {
// whatever
};
this
的值在初始化之前或之后都没有改变。该语言不提供在初始化 block 中引用“正在构造”对象的方法。
关于javascript - typescript : fat arrow & this scope relation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50726554/