For-Loop使用Constructor中的函数

时间:2016-10-11 17:17:04

标签: javascript arrays function for-loop methods

我正在阅读Codecademy关于使用Javascript构建二十一点游戏的课程。

我无法想出代码来放入for循环。我应该在Hand构造函数中编写一个“score”方法。它应循环遍历Hand中的所有卡片,将“getValue”调用的结果总结为每个,并返回该总和。

有人可以帮帮我吗?谢谢。

这是我的尝试,相关代码位于底部的for循环中:

// Card Constructor
function Card(s, n) {
  var suit = s;
  var number = n;
  this.getSuit = function() {
    return suit;
  };
  this.getNumber = function() {
    return number;
  };
  this.getValue = function() {
    if (number >= 10) {
      return 10;
    } else if (number === 1) {
      return 11;
    } else {
      return number;
    }
  };
};

//deal function
var deal = function() {
  var randNum = Math.floor(Math.random() * 13) + 1;
  var randSuit = Math.floor(Math.random() * 4) + 1;
  console.log(randNum, randSuit);
  return new Card(randSuit, randNum);
};


function Hand() {
  var handArray = [];
  handArray[0] = deal();
  handArray[1] = deal();
  this.getHand = function() {
    return handArray;
  };
  this.score = function() {
    var sum;
    for (var i = 0; i < handArray; i++) {
      sum += handArray[i].getValue;
      return sum;
    }
  };
};

3 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

this.score = function() {
  return handArray.reduce( function( memo, val){
    return memo + val.getValue();
  });
};

答案 1 :(得分:0)

我认为你需要在循环之外返回得分,如下:

this.score = function() {
  var sum;
  for (var i = 0; i < handArray; i++) {
    sum += handArray[i].getValue();
  }
  return sum;
};

答案 2 :(得分:0)

这解决了它。谢谢你的帮助!

this.score = function(){
    var sum =0;
    for(var i =0; i<handArray.length; i++){
        sum += handArray[i].getValue();
     }; 
    return sum;
};