【问题标题】:'user instanceof User' always returns false even though user and User are 100% valid'user instanceof User' 总是返回 false,即使 user 和 User 100% 有效
【发布时间】:2021-02-04 23:20:39
【问题描述】:

所以我尝试使用user instanceof User,但由于某种原因它总是返回 false。我已经控制台记录了用户和用户。 user 是一个有效的用户对象 (User { id: '<id>' ...etc }),User 返回 [class User extends Base]

我的文件完整代码是:

const { User, GuildMember, Guild } = require("discord.js");

function nickname(user, guild) {
    const IS_USER = user instanceof User,
        IS_MEMBER = user instanceof GuildMember,
        IS_GUILD = guild instanceof Guild;

    if (!IS_MEMBER && !IS_USER) return null;
    else if ((IS_MEMBER || IS_USER) && !IS_GUILD) return IS_MEMBER ? user.nickname || user.user.username : user.username;
    else if ((IS_MEMBER || IS_USER) && IS_GUILD) return guild.members.cache.get(user.id).nickname || IS_MEMBER ? user.nickname || user.user.username : user.username;
    else return null;
};

module.exports = { nickname };

为了测试,我需要我的机器人 eval 命令文件中的文件 (const member = require("/path/to/file"))。然后我运行member.nickname(message.author, message.guild),无论我如何尝试从文件中运行它,它总是返回null(因为user instanceof User 为假)。

但是,如果我将函数移动到 eval 命令文件中,然后使用nickname(message.author, message.guild),它就可以正常工作。如果我在 eval 命令本身中创建函数,它也可以正常工作。

成员文件所在的目录确实安装了 [npm i] discord.js。我试过删除成员文件并重新创建,但没有解决它。我完全不知道为什么会发生这种情况以及如何解决它。

编辑:上述所有三个(可能更多)instanceof都会发生这种情况。

【问题讨论】:

  • 不确定 eval 是如何工作的,但如果它最终创建了两组不同的 User 类,它们就不会被认为是相同的。例如 const u1 = function User() {}; const u2 = function User() {} 他们都会以用户身份登录,但 new u1() instanceof u1 为真 new u1() instanceof u2 为假。
  • @MarkusMaga 我会在我回到我的电脑时测试 laster,但这完全有道理,所以我认为你解决了它。谢谢!

标签: javascript discord.js instanceof


【解决方案1】:

如果对象继承自类的原型,instanceof 的计算结果为 true:

const user = new User()
user instanceof User   // returns true since user inherits from User.prototype

如果您的用户参数不是 User 的原型,那么它将返回 false

【讨论】:

  • userUser 的原型,我在帖子中提到过。
猜你喜欢
  • 2013-12-15
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2016-05-11
相关资源
最近更新 更多