0

在这里,我有两个“类”制作卡片和卡片。Cards 本质上是一个具有特定方法的数组:

  • 添加卡
  • 移除卡
  • 排序和洗牌

Card 是一个对象,用于保存花色值并输出连接两者的字符串。

我的问题是尝试运行此代码,即setup()单击按钮。我发现当我刚刚创建一张卡片时,它仍然可以运行。我知道这一点,因为输出仍然会变为 hello world。

但是当我尝试将卡片添加到卡片类或卡片组时。脚本停止运行。我不知道这是为什么,我感觉它不喜欢我使用 Array 的方式。

那是问题一。

我的第二个问题是,当我

var temp= new card('c','2');
alert(temp.getvalue());

这也失败了。

关于我在这里做错了什么的任何见解都会有所帮助并受到赞赏。

function setup() {
    var temp = new card('c', '2');
    var textbox = document.getElementById("output");
    textbox.value = "Hello, world!";
};

Array.prototype.shuffle = function () {
    for (var i = this.length - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var tmp = this[i];
        this[i] = this[j];
        this[j] = tmp;
    }

    return this;
}

function card(s, v) {
    this.suit = s;
    this.value = v;

    this.getvalue = function () {
        return (suit.toString() + value.toString());
    };

    this.getSortOrder = function () {
        var factor;
        if (this.suit == 'c') {
            factor = 0;
        }
        else if (this.suit == 'd') {
            factor = 1;
        }
        else if (this.suit == 'h') {
            factor = 2;
        }
        else if (this.suit == 's') {
            factor = 3;
        }
        else {
            factor = -2;
        }

        return (this.value + 13 * factor);
    };
};

function Cards() {
    this.list = new Array();

    this.Addcard = function (c) {
        list.push(c);
    };

    this.removeCard = function (c) {
        list.splice(list.indexOf(c), 1);
    };

    this.lookat = function (i) {
        return list[i];
    };

    this.sort = function () {
        list.sort();
    };

    this.shuffle = function () {
        list.shuffle();
    };

    this.prototype;
};
4

1 回答 1

1

这是一件事:

this.getvalue = function () {

    return (suit.toString() + value.toString());

};

您需要通过以下方式访问西装和价值:

this.getvalue = function () {

    return (this.suit.toString() + this.value.toString());

};

编辑:

您的代码中还有很多类似的内容(请参阅Cards函数)。Javascript 不会像其他语言那样自动为您放置“this”,因为它没有类,它有原型。

每当您尝试访问“成员变量”时,给它一些上下文,使用this.

其他代码风格提示:

  • 使用 [] 代替new Array()
  • /*用and注释大块代码*/
  • 构造函数应该大写(Card,不是 Card),函数应该是驼峰式大小写(addCard,不是 Addcard)
于 2012-11-20T19:24:33.487 回答