从严格导出默认模块内的另一个本地方法调用本地 fooBar 方法时获取"_this.fooBar is not a function"



下面是StackBlitz示例代码:js-m8uxyl。

这是粘贴的模块,我有问题:

'use strict'
export default {
isTrue: (val) => {
return val ? true : false;
},
doSquare: (val) => {
return this.isTrue(val) ? val * val : false;
},
doCube: (val) => {
return this.doSquare(val) * val;
}
}

正如您所看到的,当我尝试运行doSquaredoCube方法时,我会得到以下错误:_this.isTrue is not a function_this.doSquare is not a function

如何从另一个本地方法中正确调用本地方法?此刻我真的很困惑。。。

这是由箭头函数中模块和this的工作方式组合引起的。

首先,该文件是一个ES6模块,它使脚本顶层的this成为模块定义对象。

其次,箭头函数(()=>{}(从它们所声明的作用域继承this,这与旧样式的function(){}不同,在旧样式中,this将是它被声明为属性的对象。这意味着函数内部的this是顶级模块对象,而不是导出的对象。

如果它们是使用旧样式function(){}声明的,那么它们应该按预期工作。

最新更新