gpt4 book ai didi

javascript - 如何(最好)在作为回调传递的对象方法中访问 'this'

转载 作者:行者123 更新时间:2023-12-03 01:42:28 25 4
gpt4 key购买 nike

我正在使用 NPM 包 prompt 编写一个简单的文字游戏来练习我的 javascript(我是新手) ( https://www.npmjs.com/package/prompt ) 在我需要响应时查询用户。

由于我有 OOP 背景(使用其他语言),所以我一直在尝试将不同的功能封装在不同的对象中。所以我拥有所有prompt一个对象中的相关代码,如下所示

function Prompter() {

this.getUserName = function (callback) {

var schema = {
properties: {
name: {
description: "Tu nombre por favor:",
pattern: /^[ñÑa-zA-Z\s\-]+$/,
message: 'Solo letras, por favor',
required: true
}
}
};
prompt.get(schema, callback);
};
}

以及另一个像这样的对象中的游戏逻辑(这是代码的相关部分)

function Game() {

this.qGenerator = null;
this.prompter = null;
this.user = "";

this.doNextRound = function () {
//// omitted for brevity
};

this.init = function () {
this.qGenerator = new QuestionGenerator();
this.prompter = new Prompter();
};

this.startGame = function () {
this.prompter.getUserName(this.storeUserName);
};

this.storeUserName = function (err, result) {
if (err) {
this.handleErr(err);
return;
}
this.user = result.name;
this.doNextRound();
};
}

然后我就这样开始游戏

const game = new Game();
game.init();
game.startGame();

我遇到的问题是在 Game方法storeUserName ,我已将其作为回调传递给 prompt ,我无法访问 Game对象通过this ,因此,当我打电话时

this.doNextRound

storeUserName内我明白

TypeError: this.doNextRound is not a function

我明白为什么,如 this指的是回调中的 Node。但我不知道如何保留对正确this的引用在我作为回调传递的方法内部。我了解如何在更“普通”的 Javascript 中执行此操作 - 使用 that = this ,或apply等等,但我不确定处理 this 的最佳方法是什么? Node 回调内部是当您传递另一个对象的方法时。非常感谢任何建议。

最佳答案

使用Function.prototype.bind :

this.prompter.getUserName(this.storeUserName.bind(this));

arrow function :

this.prompter.getUserName( _ => this.storeUserName() );

其中任何一个都可以。

关于javascript - 如何(最好)在作为回调传递的对象方法中访问 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50776174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com