Javascript 在fat箭头中显示此上下文
举个例子可以更好地说明我的问题Javascript 在fat箭头中显示此上下文,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,举个例子可以更好地说明我的问题 let obj = { columns: [ { column: name }, { column: name }, { column: name }, { column: name }, { column: name } ], someFunc: () => { this.somePublicFunc(this.columns[0])
let obj = {
columns: [
{ column: name },
{ column: name },
{ column: name },
{ column: name },
{ column: name }
],
someFunc: () => {
this.somePublicFunc(this.columns[0])
}
}
使用常规函数()时,this.columns将指向obj.columns。在fat arrow函数中是否有方法访问此范围内的函数
someFunc: function() {
this.somePublicFunc(this.columns[0])
}
或者,我可以在非胖箭头函数中调用公共函数吗
someFunc: function() {
this.somePublicFunc(this.columns[0])
}
编辑:我知道我可以访问obj.columns,但我正在寻找其他选项,因为这不是实际代码中最优雅的选项
编辑:这是将所有公共方法快速更改为箭头函数的结果。我甚至从未想过要将问题方法更改为传统的非胖箭头函数。问题解决了,自我挫伤。请记住,箭头函数根据声明函数时的当前
this
确定其this
,而不是基于其在对象中的位置
在上面的代码中,假设它是全局运行的,当函数someFunc
被声明时,this
指针将在浏览器中的window
和节点中的global
中,这将是arrow函数内部的this
指针
通常,使用传统的函数声明可以解决您的问题,除非
此
被其他内容更改。请记住,箭头函数在声明函数时根据当前的此
确定其此
,而不是基于其在对象中的位置
在上面的代码中,假设它是全局运行的,当函数someFunc
被声明时,this
指针将在浏览器中的window
和节点中的global
中,这将是arrow函数内部的this
指针
通常,使用传统的函数声明可以解决您的问题,除非
this
被其他内容更改。在普通JavaScript中,this.columns会指向obj.columns
不,它不会。Typescript arrow函数的工作原理与Javascript arrow函数相同。当然可以在非胖arrow函数中调用公共函数。为什么不行?SLaks是对的。TypeScript只是JS的上标。你可以整天用TS写JS。有效的JS就是有效的TS。我知道TypeScript是JS的超集。如果您查看两个someFunc示例,您将看到一个是胖箭头,另一个是正则函数。这表明这两个方面都不同。我的问题是如何从同一个函数中访问这两个函数。此外,vanilla是一个错误的词,但在下面的常规函数中,this.columns确实指向obj.columns。删除了TypeScript引用。“有没有办法用箭头函数实现这一点?”-没有。箭头函数不能用作方法。在vanilla JavaScript中,this.columns会指向obj.columns
没有。Typescript arrow函数的工作原理与Javascript arrow函数相同。当然可以在非胖arrow函数中调用公共函数。为什么不行?SLaks是对的。TypeScript只是JS的上标。你可以整天用TS写JS。有效的JS就是有效的TS。我知道TypeScript是JS的超集。如果您查看两个someFunc示例,您将看到一个是胖箭头,另一个是正则函数。这表明这两个方面都不同。我的问题是如何从同一个函数中访问这两个函数。此外,vanilla是一个错误的词,但在下面的常规函数中,this.columns确实指向obj.columns。删除了TypeScript引用。“有办法使用箭头函数吗?”-没有。箭头函数不能用作方法。我想使用传统的函数声明,即代码当前的状态,但我不确定如何访问公共函数。您可以通过以下对象访问它:obj.someFunc()
担心这就是答案,所以在发布此消息之前就开始了这条路径。不幸的是,实际的代码没有我的示例那么简单。我想使用传统的函数声明,即代码当前的状态,但我不确定如何访问公共函数。您可以通过对象访问它,如下所示:obj.someFunc()
担心这就是答案,所以在发布此消息之前就开始了这条路径。不幸的是,实际的代码没有我的示例那么简单。