首页 > 解决方案 > 如何正确创建供其他功能使用的对象

问题描述

我正在尝试学习 javascript,目前正在玩 Kata Evercraft 挑战。

长话短说我需要创建一个角色,这个角色将有一个名字,统计数据,健康等作为这个对象的一部分。我已经定义了一个“角色”类,以防我想玩多个角色。角色对象将在“nameEntry()”函数中创建,因为用户要做的第一件事就是决定名称。稍后,其他功能将访问此对象并添加统计信息、调整健康状况或根据需要调用要显示的信息。

有人告诉我,将对象创建为全局变量是在编程时通常要避免的事情,但我不能 100% 确定如何使该对象在其他地方访问而不是全局的。

我的第一次尝试让我通过使用 window.xml 声明它来将此变量设置为全局变量。在函数中。这行得通,但显然使它成为全球性的......

到目前为止,这是我的代码,我调用了一个 console.log 函数来测试我的对象是否可访问。显然,我目前的代码由于未定义 character1 而引发错误。我应该如何最好地解决这个问题?

class Character {
    constructor(name) {
    this._name = name;}
    get name() {
        return this._name;
    }

}


const nameEntry = () => {
    let name = prompt("Enter your name: ", "name");
    const character1 = new Character(name);
    console.log(character1.name);
    document.getElementById("nameText").innerHTML = character1.name;
    if (character1.name != 'name') {
        $( ".button" ).remove();
    }
}

const displayName = () => {
    console.log(character1.name);
}   

如果我的代码按预期工作,那么调用 displayname() 函数将显示在提示中输入的内容并在 character1 对象中设置为“名称”。

标签: javascriptjquery

解决方案


displayName没有按预期工作,因为character1变量只存在于nameEntry函数内部。如果你想避免使用全局变量,你的nameEntry函数应该返回 Character 并且displayName函数应该接受 Character 作为参数。

const displayName = (character) => {
  console.log(character.name);
}

推荐阅读