我查看了很多参考资料,但找不到任何可以解决我尝试做的事情。我是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}
我错过了什么?
答案 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();