0

我正在尝试创建一个函数来在 javascript 中从一副牌中分发卡片,但是当我在我的交易函数中为未来的对象属性创建一个参数时,它会将属性返回为未定义。为什么会这样?

//Creates the deck
var deck = Math.ceil(Math.random() * 52) + 1;
var Ace = 1;
var Face = 10;
if (deck % 13 == 1) {
deck = Ace;
} else if (deck % 13 === 11 || deck % 13 === 12 || deck % 13 === 0) {
    deck = Face;
} else if (deck % 13 === 2) {
    deck = 2;
} else if (deck % 13 === 3) {
    deck = 3;
} else if (deck % 13 === 4) {
    deck = 4;
} else if (deck % 13 === 5) {
    deck = 5;
} else if (deck % 13 === 6) {
    deck = 6;
} else if (deck % 13 === 7) {
    deck = 7;
} else if (deck % 13 === 8) {
    deck = 8;
} else if (deck % 13 === 9) {
    deck = 9;
} else {
    deck = 10;
}
//Creates the player as an object
function Player(pcard1) {
    pcard1 = pcard1;
}
//Deals a random card out of the deck
var deal = function (pob) {
    pob = deck;
};
deal(Player.pcard1);
alert(Player.pcard1);
4

2 回答 2

0

经过一些评论,一些初步的笔记。我猜你错过了一些关于 Javascript 工作的基础:

  1. Player 是一个函数,这是一个很好的起点。但是您然后尝试访问它的成员。这只有在你从函数中实例化一个新对象后才有可能,将它用作构造函数

    var player = new Player(card_value);
    player.pcard1; // this is the public member of a Player instance
    
  2. Deal 函数应该返回一个值,或者遵循上述准则;

  3. 目前尚不清楚(尽管两者都是正确的)为什么要使用“function FunctionName”然后使用“var FunctionName = function”方法。

也就是说,您可以完全跳过长 if/else 块,用更结构化的方法代替它:

var Ace = 1;
var Face = 10;
var symbols = [Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Face, Face, Face];
var deal = function() {
    var card = Math.random() * 51;
    return symbols[Math.floor(card % 12)];
}

var Player = function(card_value) {
    this.card = card_value;
}

var card_value = deal();
var player = new Player(card_value);
alert(player.card);

然后,您可以使用简单的方法为玩家分配一张新卡:

player.card = deal();

请记住,您可以将任何您喜欢的成员附加到播放器:

player.name = "Rambo";
于 2013-06-04T06:40:20.950 回答
0

通过传递,Player.pcard1您只会将变量的当前值传递给bob参数,无论您做什么bob都不适用于Player.pcard1.

您应该为不同的参数编写不同的函数。

//Creates the player as an object
function Player(pcard1) {
    Player.pcard1 = pcard1;
}
//Deals a random card out of the deck
var deal = function () {
    Player.pcard1 = deck;
};
var deal2=function(){
    Player.id="hello";   
}
deal();
deal2();
alert(Player.pcard1);
alert(Player.id);

(或者)

编写函数返回值:

function getDeckValue(){
        return deck;
 }
 function getID(){
        return "1234";
  }
 Player.pcard1=getDeckValue();
 Player.id=getID();

(或者)

javascrit使用@sixFingers 指出的更灵活的概念,定义一个类实例化它编写成员函数等。这样你就可以像Player.variable等一样访问。

jquery 开发人员在 javascript 上的优秀教程(我是认真的):Advanced Javascript 。它涉及您想要的所有 oop 概念,并讨论了许多您在 w3schools 上找不到的 javascript 功能。

编辑:第二个示例的工作代码

    //Creates the deck
var deck = Math.ceil(Math.random() * 52) + 1;
var Ace = 1;
var Face = 10;
if (deck % 13 == 1) {
    deck = Ace;
} else if (deck % 13 === 11 || deck % 13 === 12 || deck % 13 === 0) {
    deck = Face;
} else if (deck % 13 === 2) {
    deck = 2;
} else if (deck % 13 === 3) {
    deck = 3;
} else if (deck % 13 === 4) {
    deck = 4;
} else if (deck % 13 === 5) {
    deck = 5;
} else if (deck % 13 === 6) {
    deck = 6;
} else if (deck % 13 === 7) {
    deck = 7;
} else if (deck % 13 === 8) {
    deck = 8;
} else if (deck % 13 === 9) {
    deck = 9;
} else {
    deck = 10;
}
//Creates the player as an object
function Player(pcard1){
   Player.pcard1=pcard1;   
}
function getDeckValue(){
        return deck;
 }
 function getID(){
        return "1234";
  }
 Player.pcard1=getDeckValue();
 Player.id=getID();

alert(Player.pcard1);
alert(Player.id);
于 2013-06-04T06:55:30.250 回答