访问和更新对象

时间:2018-08-30 11:29:54

标签: javascript object

我在访问对象时遇到麻烦,我试图定义一个let并向它写入一个新对象,但是当我尝试访问它时,这是不可能的,这就是我的尝试: / p>

function Player(uniqueId, name, figureString, motto, memberSince) {
    this.uniqueId = uniqueId;
    this.name = name;
    this.figureString = figureString;
    this.motto = motto;
    this.memberSince = memberSince;
}

...

let player;
getUser
    .then((res) => {
        player = new Player(res.uniqueId, res.name, res.figureString, res.motto, res.memberSince);
    })
    .catch(() => {
            ...
    });

        // Trying to access player here
console.log(player.name + player.figureString);

3 个答案:

答案 0 :(得分:0)

您正在尝试对console.log进行异步函数调用之后再调用getUserplayer可能仍未定义,因为getUser尚未解析(此时)设置player = new Player(...)。如果您调整代码以遵循异步流程并重新分配播放器变量后登录then,则应该可以访问它。

答案 1 :(得分:0)

当您声明let player时,它具有窗口范围,因此我希望可以从任何地方访问它。我希望get user是ajax调用,可能是您在从服务器获取值之前运行console.log(player.name + player.figureString);。因此,您可以按照以下方式进行操作,如下所示,可以在console.log(player.name + player.figureString); then内使用function

function Player(uniqueId, name, figureString, motto, memberSince) {
    this.uniqueId = uniqueId;
    this.name = name;
    this.figureString = figureString;
    this.motto = motto;
    this.memberSince = memberSince;
}

...

let player;
getUser
    .then((res) => {
        player = new Player(res.uniqueId, res.name, res.figureString, res.motto, res.memberSince);
        // once res is populated
console.log(player.name + player.figureString);
    })
    .catch(() => {
            ...
    });

        // Trying to acces player here 
console.log(player.name + player.figureString);

答案 2 :(得分:0)

和其他人一样,问题出在library(tidyverse) d %>% map(~filter(.,1:n() != 1 | b != 2006)) [[1]] a b 1 2.14889697 2006 2 0.05842311 2006 3 1.89911545 2006 4 -0.16836139 NA [[2]] a b 1 1 2007 2 2 2007 3 3 NA 4 4 NA 5 5 2007 和异步代码上。因此,在调用console.log(...)时未定义播放器。为避免这种情况,您可以使用console.log()

async/await

不是我添加了getUser存根和简化示例以仅使用function Player(id, name) { this.name = name; this.id = id; } const getUser = () => { return new Promise((resolve, reject) => { return resolve({ name: "Karl", id: 1 }); }); } (async () => { try { const { name, id } = await getUser(); const player = new Player(id, name); console.log(`id: ${player.id}, name: ${player.name}`); } catch (err) { //handle error } })(); name。最后,您可以看到IIFE,因为要使用id关键字,它必须放在await函数内部。这样,您可以确定已定义播放器。