javascript检查函数参数是否符合条件

时间:2014-10-06 22:06:58

标签: javascript

我试图写一个基本的"任务"功能并遇到了一些问题。 This is what I've done so far

JS

var clicks = 0;
var coins = 10;

var Quests = function(type, required, reward, message) {
    this.type = type;
    this.required = required;
    this.reward = reward;
    this.message = message;
    this.quest = function() {
        if (this.type >= this.required) {
            coins += this.reward;
            return this.message;
        } else {
            alert('You don\'t have enough ' + required);
        }
    };
};
quest1 = new Quests(clicks, 10, 50, 'You completed this quest!');
quest2 = new Quests(clicks, 5, 50, 'You completed this quest!');

theQuests = [quest1, quest2];

$(document).ready(function() {
    $('#click').click(function() {
        clicks += 1;
        $('#queststuff').text(clicks);
    });
    $('#quest').click(function() {
        $('#queststuff').html(Quests[Math.floor(Math.random() * 2)].quest());
    });
});

HTML

   <button id="quest">quest</button>
   <button id="click">click me!</button>
   <div id="queststuff">   
   </div>

最终我会使用点击之外的东西,但是现在我想让基本功能正常工作。我对功能很陌生,但在点击“任务”的时刻。没有任何反应,而我想要alert显示。我的代码中的某处显然出错了。有人能够指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

您正在为clicks分配Number,一个不可变的this.type。它的值最初为0,因此this.type在赋值后保持为0。您应该在clicks方法中将this.requiredquest进行比较。

这是使用data-attributes

jsFiddle fork版本

答案 1 :(得分:0)

您的代码有几个问题。

  • 使用quest1创建新对象new Objects时,会将clicks传递给它。当您通过clicks时,它等于0。在对象方法quest1.quest()中,您可以检查点击次数(this.type)是否大于/等于所需的点击次数(this.required)。 this.type等于0。它永远不会真实。由于您要创建多个任务,因此点击应特定于这些任务(对象)。它不应该是全球性的。

  • 另一个是这一行:

    $('#queststuff').html(Quests[Math.floor(Math.random() * 2)].quest());

    我相信你想要解决你的theQuests阵列。 Quests[Math.floor(Math.random() * 2)].quest()根本无法工作。即使您将代码更改为theQuests[0].quest()quest1.quest(),它仍然无法正常工作。如上所述,由于有多个任务,首先需要检查哪个是有效的。

您应该检查您的代码。这是让你入门的东西。当然,它需要进一步改进和造型。 FIDDLE

var Quest = function (requiredClicks, reward, message) {
    this.clicks = 0;
    this.coins = 0;
    this.requiredClicks = requiredClicks;
    this.reward = reward;
    this.message = message;
    this.check = function () {
        if (this.clicks >= this.requiredClicks) {
            this.coins += this.reward;
            return this.message;
        } else {
            alert('You don\'t have enough clicks: ' + this.clicks + "/" + this.requiredClicks);
        }
    };
    this.click = function() {
        this.clicks++;
    };
};
var quest1 = new Quest(10, 50, 'You completed this quest!');

$('#click').click(function () {
    quest1.click();
    $('#queststuff').text(quest1.clicks);
});
$('#quest').click(function () {
    $('#queststuff').html(quest1.check());
});