4Manuals

  • PDF Cloud HOME

如何将对象实例传递给函数? Download

    CSS / JS-如何覆盖一个孩子而不是其他孩子的父母过渡 反应:更改方向后触发重新渲染和offsetWidth的重新计算 我的Javascript从'string'转换为'integer'或'number'无效 如何删除外部索引并合并内部json 在React Native 图片无法通过javascript刷新 如何在react图表上的datakey中操作DateTime 在Cypress中保存变量 如何从作为请求传递的输入类型数据绑定中提取数据 通过dropzone laravel通过电子邮件发送多个图像

我正在创建一个多人问答游戏。我首先创建一个构造函数来存储玩家的ID和每个问题的答案(每个字母的字母一个问题):

function players(_id, a , b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) {
this._id = _id;
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.e = e;
this.f = f;
this.g = g;
this.h = h;
this.i = i;
... etc.

我已将所有内容置于一个for循环中,该循环创建了与用户输入所说的一样多的新player(obj)。然后,我对问题有不同的职能。我在弄清楚如何将对象播放器的每个实例传递给函数时遇到了麻烦。因此,假设有四个播放器,我想将播放器1的players.id传递给该函数,但我不知道该如何处理。

此刻我正在做的是:

function createPlayers(playersTotal) {
numPlayers = playersTotal;
var num = "1"
for (var i = 0; i < numPlayers; i++) {
    var player = new players("Jugador " + num++);
    }
    questions(player);
}

function questions(obj) {

    console.log(obj);
}

这是一个片段:

function players(_id, a , b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) {
    this._id = _id;
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;
    this.e = e;
    this.f = f;
    this.g = g;
    this.h = h;
    this.i = i;
}

function createPlayers(playersTotal) {
    numPlayers = playersTotal;
    var num = "1"
    for (var i = 0; i < numPlayers; i++) {
        var player = new players("Jugador " + num++);
    }
    questions(player);
}

function questions(obj) {

    console.log(obj);
}

createPlayers(10);

但这只会返回:

players {_id: "Jugador 4", a: undefined, b: undefined, c: undefined, d: undefined, …}

那是我做错的另一件事:覆盖播放器_id。因此,我想这里的问题是我无法弄清楚如何管理对象的新实例。

任何帮助或提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题在于您对questions的呼叫位于创建玩家的循环的外部中。因此,您将在循环中反复覆盖player,然后仅使用最后一个。如果您想与每个玩家通话,请将通话置于questions 内部中:

function players(_id, a , b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) {
    this._id = _id;
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;
    this.e = e;
    this.f = f;
    this.g = g;
    this.h = h;
    this.i = i;
}

function createPlayers(playersTotal) {
    numPlayers = playersTotal;
    var num = "1"
    for (var i = 0; i < numPlayers; i++) {
        var player = new players("Jugador " + num++);
        questions(player);
    }
}

function questions(obj) {

    console.log(obj);
}

createPlayers(10);

或者,如果您希望一次将所有个玩家传递给questions,则要创建一个玩家数组,然后将该数组传递给questions:</

function players(_id, a , b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) {
    this._id = _id;
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;
    this.e = e;
    this.f = f;
    this.g = g;
    this.h = h;
    this.i = i;
}

function createPlayers(playersTotal) {
    numPlayers = playersTotal;
    var num = "1"
    var playerList = []; // *** Create the array
    for (var i = 0; i < numPlayers; i++) {
        var player = new players("Jugador " + num++);
        playerList.push(player); // *** Put this player in it
    }
    questions(playerList); // *** Pass the array to the function
}

function questions(obj) {

    console.log(obj);
}

createPlayers(10);


代码还有其他一些问题,以及您可能会考虑更改的其他事项:

    从未声明
  1. numPlayers。在宽松模式(您似乎正在使用)下,这可能会使您的代码成为我称为隐式全球性恐怖的猎物,从而创建了一个全局 {{1} }变数(没有一个限于numPlayers)。确保声明您的变量。

  2. 您正在使用字符串 createPlayers初始化num,然后在其上使用"1",它将转换为数字。而是使用数字(++)对其进行初始化,以便保持一致。

  3. 但是,您不需要var num = 1;;您已经有num。您可以执行i,甚至可以进行循环new players(i + 1);并使用for (i = 1; i <= numPlayers; ++i)。

  4. 在JavaScript中,带有构造函数*(用new players(i)调用的函数)的压倒性约定是:

    • 它们以大写字母开头,因此new,而不是Players;和
    • 它们是单数名词,不是复数名词(在某些特殊情况下除外),所以players,而不是Player。



Similar searches
    如何限制PHP应用程序中的外部API调用 AuthGuard防止Angular Material完全加载 android应用程序自动化的最佳方法 TensorFlow Keras API和TensorBoard的有效使用 memcached字节大于limit_maxbytes