使用Node.js,我正在调用一个名为customFunction
的函数,该函数是GrpahQL解析器的一个变体。我没有访问this
的权限。
import { Mutation } from './mutation/Mutation'
export default {
Query,
Mutation,
}
然后在Mutation.ts
import { customFunctionMutation } from './customFunctionMutation'
export const Mutation = {
customFunction: customFunctionMutation.customFunction,
}
然后在customFunctionMutation.ts
export const customFunctionMutation = {
test() {
console.log('test called')
},
async customFunction(parent: any, args: any, ctx: any, info: any) {
console.log('customFunction init')
console.log('this', this)
this.test()
console.log('customFunction end')
},
}
这是undefined
,我不能调用同一对象中的函数test()
答案 0 :(得分:2)
执行此操作时,已将方法与具有test
方法的对象分开:
import { customFunction } from './customFunction'
因此,当您尝试调用customFunction()
时,它将与在其内部声明的对象没有关联,因此它无法引用this.test()
,因为this
将是{ {1}}。
仅供参考,为出口指定相同的名称,并在出口上设置属性会给您的客户带来混乱。请不要这样做。
我建议通过使模块独立于将其更改为不再使用undefined
来调用它的方式来对其进行修复:
this
然后,您可以使用:
const moduleObj = {
test() {
console.log('test called')
},
async customFunction(parent: any, args: any, ctx: any, info: any) {
console.log('customFunction init')
console.log('this', this)
moduleObj.test()
console.log('customFunction end')
},
}
export default moduleObj;
然后,您可以致电:
import { customFunction } from './customFunction'
,它在被调用时将能够正常运行。
答案 1 :(得分:1)
其中一种可能有效:
import { customFunction } from './customFunction'
export const Mutation = {
customFunction: customFunction.customFunction.bind(customFunction),
}
或
import { customFunction } from './customFunction'
export const Mutation = customFunction
或
import { customFunction } from './customFunction'
export const Mutation = {
customFunction: function functionName(...parameters) { return customFunction.customFunction(...parameters); },
}