在ExpressJS设置中,我在server.js
中执行以下操作:
import { call_method } from '../hereIam.mjs';
const process_db = async () => {
console.log(this); // undefined
call_method(this);
};
console.log(this) // undefined
process_db();
然后,我要从hereIam.mjs
调用父方法,但这是未定义的
export const call_method = parent_this => console.log(parent_this); // undefined
我试图在server.js中包含类,以试图强制使用this
class AppServer {
constructor() {
console.log(this)
}
const process_db = async () => call_method(this);
}
但是似乎类内的箭头函数未在(实验性的)NodeJS中编译(这应该是另一个问题)
已编辑
如何做到这一点,是避免使用箭头表示法以便能够在Express中使用类,然后实例化一个提供this
的类。
class AppServer {
async process_db() {call_method(this)};
}
let server = new AppServer();
server.process_db();
问题将是,获取this
引用的唯一方法是使用对象/类?
答案 0 :(得分:1)
您可以使用bind方法并传递任何对象作为this
上下文。
但是,箭头函数从调用它们的上下文中接收上下文,function() {}
函数语法使用由它们定义在其中的上下文隐式绑定到它们的上下文,或者使用此 bind显式地绑定到它们。 方法。
因此,使用类的替代方法是将一个简单的对象绑定到该方法,例如:
const call_method = require('../hereIam.mjs');
const process_db = async function() {
console.log(this);
call_method(this);
};
console.log(this);
const context = {
name: 'bound context',
parent_method: async function() {
console.log('Good evening');
}
}
process_db.bind(context)();
假设hereIam.mjs
包含:
module.exports = parent_this => console.log(parent_this);
然后脚本将输出:
{}
{ name: 'bound context',
parent_method: [AsyncFunction: parent_method] }
{ name: 'bound context',
parent_method: [AsyncFunction: parent_method] }