java 当 this 不指向模块而是指向全局范围时,脚本如何访问同一模块中的函数
java script how to access function within the same module when this doesn't point to the module instead points to the global scope
这样调用模块中的函数时
app.get("/api/sessions/oauth/google", (req, res) => {
return google_callback.googleOAuthHandler(req, res);
});
this
指向模块,可以使用 this
访问模块中的另一个函数
googleOAuthHandler : async function (req, res) {
const code = req.query.code.toString();
const {id_token, access_token} = await this.getGoogleOAuthToken(code);
}
然而,将函数作为参数传递会将 this
更改为全局,并且 this.getGoogleOAuthToken
变为未定义
即做
app.get("/api/sessions/oauth/google", google_callback.googleOAuthHandler);
使用这种方式时,我将如何访问 google_callback
模块中的 googleOAuthHandler
中的 getGoogleOAuthToken
app.get("/api/sessions/oauth/google", google_callback.googleOAuthHandler);
以这种方式传递函数时 this
并不意味着 module
。所以 this.getGoogleOAuthToken
不起作用。
但是我们可以使用 module.exports.getGoogleOAuthToken
来访问同一模块中的函数。使用 module.exports.getGoogleOAuthToken
也适用于第一个示例。
或者,如果您不喜欢 module.exports
调用该函数,您可以将行 const _this = this;
放在文件顶部或 const _this = module.exports = { ... }
并使用 _this.function
来在模块内调用函数。
还注意到在第一个示例中 this.function
之所以有效,是因为我使用的是这种语法。
module.exports = {
func1 : function(){},
func2 : function(){}
}
导出时
module.exports.func1 = function(){}
module.exports.func2 = function(){}
this
不能用于访问其他函数
这样调用模块中的函数时
app.get("/api/sessions/oauth/google", (req, res) => {
return google_callback.googleOAuthHandler(req, res);
});
this
指向模块,可以使用 this
googleOAuthHandler : async function (req, res) {
const code = req.query.code.toString();
const {id_token, access_token} = await this.getGoogleOAuthToken(code);
}
然而,将函数作为参数传递会将 this
更改为全局,并且 this.getGoogleOAuthToken
变为未定义
即做
app.get("/api/sessions/oauth/google", google_callback.googleOAuthHandler);
使用这种方式时,我将如何访问 google_callback
模块中的 googleOAuthHandler
中的 getGoogleOAuthToken
app.get("/api/sessions/oauth/google", google_callback.googleOAuthHandler);
以这种方式传递函数时 this
并不意味着 module
。所以 this.getGoogleOAuthToken
不起作用。
但是我们可以使用 module.exports.getGoogleOAuthToken
来访问同一模块中的函数。使用 module.exports.getGoogleOAuthToken
也适用于第一个示例。
或者,如果您不喜欢 module.exports
调用该函数,您可以将行 const _this = this;
放在文件顶部或 const _this = module.exports = { ... }
并使用 _this.function
来在模块内调用函数。
还注意到在第一个示例中 this.function
之所以有效,是因为我使用的是这种语法。
module.exports = {
func1 : function(){},
func2 : function(){}
}
导出时
module.exports.func1 = function(){}
module.exports.func2 = function(){}
this
不能用于访问其他函数