为什么使用箭头函数扩展现有对象的属性失败 [duplicate]

Why extending property of existing object with arrow function fails [duplicate]

提问人:Validus Oculus 提问时间:12/4/2022 更新时间:12/4/2022 访问量:79

问:

为什么箭头函数在以下情况下无法识别指针。我知道常规函数有自己的执行范围,但我无法确定为什么后续失败。在箭头函数的情况下,是 。如果有人能阐明,那就太好了。谢谢!thisthisthisundefined

PS:这段代码只是出于实验目的,不是什么严肃的事情。

const addProperty = function(op, func) {
  String.prototype.__defineGetter__(op, func);
};

// works
addProperty('upper', function() {
  return this.toUpperCase();
});

// fails to identify this
addProperty('lower', () => {
  return this.toLowerCase();
});
JavaScript 关闭 这个 箭头函数

评论

1赞 Anand Pap 12/4/2022
经过简短的谷歌搜索后找到了答案。:)stackoverflow.com/questions/31095710/......

答:

2赞 Samathingamajig 12/4/2022 #1

箭头函数保留外部范围。 关键字函数,在此上下文中,获取它们所放置的对象。他们就是这样做的。thisfunctionthis

评论

0赞 Andrew Shearer 12/4/2022
除此之外,如果要使用箭头函数,只需使用该方法显式设置箭头函数的值:bindthisaddProperty('lower', () => { return this.toLowerCase(); }.bind(this));
1赞 Samathingamajig 12/4/2022
@AndrewShearer 这样做不起作用(部分原因是语法错误;你需要把它括在括号里),因为这仍然会将其绑定到外部作用域,因为这就是此时的值this
0赞 Bergi 12/4/2022
@AndrewShearer 无法重新绑定箭头函数
0赞 Samathingamajig 12/4/2022
显然,您不能重新绑定箭头函数,很高兴知道,但它不会抛出警告/错误/异常