提问人:Validus Oculus 提问时间:12/4/2022 更新时间:12/4/2022 访问量:79
为什么使用箭头函数扩展现有对象的属性失败 [duplicate]
Why extending property of existing object with arrow function fails [duplicate]
问:
为什么箭头函数在以下情况下无法识别指针。我知道常规函数有自己的执行范围,但我无法确定为什么后续失败。在箭头函数的情况下,是 。如果有人能阐明,那就太好了。谢谢!this
this
this
undefined
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();
});
答:
2赞
Samathingamajig
12/4/2022
#1
箭头函数保留外部范围。 关键字函数,在此上下文中,获取它们所放置的对象。他们就是这样做的。this
function
this
评论
0赞
Andrew Shearer
12/4/2022
除此之外,如果要使用箭头函数,只需使用该方法显式设置箭头函数的值:bind
this
addProperty('lower', () => { return this.toLowerCase(); }.bind(this));
1赞
Samathingamajig
12/4/2022
@AndrewShearer 这样做不起作用(部分原因是语法错误;你需要把它括在括号里),因为这仍然会将其绑定到外部作用域,因为这就是此时的值this
0赞
Bergi
12/4/2022
@AndrewShearer 无法重新绑定箭头函数
0赞
Samathingamajig
12/4/2022
显然,您不能重新绑定箭头函数,很高兴知道,但它不会抛出警告/错误/异常
评论