为何使用箭头函数扩展已有对象属性会失败?
为什么箭头函数在这里无法识别this指针?
核心原因:箭头函数没有独立的this上下文
箭头函数的关键特性是不绑定自己的this,它会在定义时捕获当前词法作用域中的this值,并永久保留这个绑定,不会随调用方式改变而变化。
对比普通函数与箭头函数的行为
普通函数作为 getter:当你将普通函数传给
__defineGetter__时,这个函数的this会在调用时动态绑定到调用它的对象(也就是String实例)。比如执行"hello".upper时,函数内的this指向字符串"hello",所以this.toUpperCase()能正常调用。箭头函数作为 getter:你定义的箭头函数
() => this.toLowerCase(),它的this是在定义时从外层作用域捕获的。如果这段代码运行在全局作用域(非严格模式),this会指向全局对象(浏览器中是window),但全局对象没有toLowerCase方法;如果是严格模式或ES模块环境,this会是undefined,直接导致调用this.toLowerCase()报错。
总结
Getter方法需要函数能根据调用对象动态绑定this,而箭头函数的this是固定的词法this,无法满足这种动态绑定需求。因此在这类场景下,必须使用普通函数而非箭头函数。
内容的提问来源于stack exchange,提问作者Validus Oculus
相关产品推荐
相关产品推荐

