将变量函数传递给数组[Javascript]

时间:2015-09-25 01:12:55

标签: javascript jquery arrays

我查看了很多参考资料,但找不到任何可以解决我尝试做的事情。我是Javascript和JQuery的新手,所以我觉得我必须遗漏一些东西。

我为D& D stats发生器创建了一个骰子滚轮。骰子滚轮工作正常:

function makeDie(sides) {
  var die = function () {
    return 1 + Math.random() * sides | 0;
  };

  die.times = function (count) {
    var rolls = [];
    for(var i = 0 ; i < count ; i++) {
      rolls.push(this());
    }
    return rolls;
  };

  return die;
}

var dice = {
  d4: makeDie(4),
  d6: makeDie(6),
  d8: makeDie(8),
  d10: makeDie(10),
  d12: makeDie(12),
  d20: makeDie(20),
};

然后我可以随意滚动统计数据(滚动4d6,丢弃最低死亡),如下所示:

var stat = function (){
    x = dice.d6.times(4)
    x = x.sort();
    s = x[1] + x[2] + x[3]
    return s
    }

但后来我想将统计数据传递给数组:

var stats = [];
for (i=0; i<6; i++) {
    stats.push(stat);
    }
var stats = stats.sort();

但我得到的输出是用明文打印6次的函数:

  

function(){x = dice.d6.times(4)x = x.sort(); s = x [1] + x [2] + x [3]   返回s},

     

function(){x = dice.d6.times(4)x = x.sort(); s = x [1] + x [2] +   x [3]返回s},

     

function(){x = dice.d6.times(4)x = x.sort(); s = x [1] + x [2] +   x [3]返回s},

     

function(){x = dice.d6.times(4)x = x.sort(); s = x [1] + x [2] + x [3]   返回s},

     

function(){x = dice.d6.times(4)x = x.sort(); s = x [1] + x [2] + x [3]   返回s},

     

function(){x = dice.d6.times(4)x = x.sort(); s = x [1] + x [2] +   x [3]返回s}

我错过了什么?

3 个答案:

答案 0 :(得分:3)

您正在将stat函数推送到数组而不是调用函数的结果。你需要在stat之后放():

thread 1

答案 1 :(得分:1)

您必须致电stat功能:

stats.push(stat());

添加数组,返回stats数组。如果没有(),您可以将函数本身添加到stats六次。 <function>.toString()返回函数的js代码。

答案 2 :(得分:0)

在Javascript中,函数是对象,当你调用一个函数而没有像stats without()那样的括号时,它会传递对象,你会看到函数体传递,你必须用括号调用函数stats()如果你想传递想要函数返回而不是函数对象本身。代码将如下所示:

var stats = [];
for (i=0; i<6; i++) {
    stats.push(stat());
    }
var stats = stats.sort();