下面是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;
}
}
正如您所看到的,当我尝试运行doSquare
或doCube
方法时,我会得到以下错误:_this.isTrue is not a function
或_this.doSquare is not a function
。
如何从另一个本地方法中正确调用本地方法?此刻我真的很困惑。。。
这是由箭头函数中模块和this
的工作方式组合引起的。
首先,该文件是一个ES6模块,它使脚本顶层的this
成为模块定义对象。
其次,箭头函数(()=>{}
(从它们所声明的作用域继承this
,这与旧样式的function(){}
不同,在旧样式中,this
将是它被声明为属性的对象。这意味着函数内部的this
是顶级模块对象,而不是导出的对象。
如果它们是使用旧样式function(){}
声明的,那么它们应该按预期工作。