javascript对象,为单个玩家保持10针保龄球比赛的准确得分

时间:2011-05-13 23:01:39

标签: javascript

最近,我接受了网络开发人员职位的面试。

他们让我创建一个保持准确得分的javascript对象 单人比赛的十针保龄球比赛。

我完成了测试。

您可以在此网址http://jsbin.com/arele5

上运行该脚本

如果您想编辑,请转到此链接http://jsbin.com/arele5/edit

我有两个问题:

1)javascript对象适用于谷歌浏览器,但jsbin抱怨以下构造

var bowlingGame = new function(){...};

如果我按以下方式更正结构

var bowlingGame = function(){...};

jsbin告诉我,一切都很好,但它在谷歌浏览器中不起作用。有什么想法吗?

2)我没有通过面试,确实没有收到任何答复;所以我的第二个问题是:

解决这项运动的最佳方法是什么?

谢谢,

安东尼奥

1 个答案:

答案 0 :(得分:2)

对于#1,请尝试:

var bowlingGame = new (function(){ ...})();

对于#2,我不能确切地说为什么你没有得到一份工作,但你的代码的间距,如果没有别的,是不是很好看。我刚刚写了这篇文章,它更紧凑,更易于阅读:

function game(){
    this.balls = [];
}

game.prototype = {
    addBalls : function(n){
        this.balls.push.apply(this.balls, arguments);
    },

    getScoreArray : function(){
        var score=0, ball=0, frame=1, frames=[], cur;
        for(var i=0, l=this.balls.length; i<l; i++){
            score += (cur = this.balls[i])
                + ((!ball && frame<10 && cur==10 && this.balls[i+2]) || 0)
                + (frame<10 && (((ball ? this.balls[i-1] : 0) + cur) == 10) ? this.balls[i+1] || 0 : 0);
            ball = ball || (cur==10) ? 0 : 1;
            ball || (frame<10 ? frames.push(score) && frame++ : frames[9] = score);
        }

        return frames;
    }
};

如果没有别的,如果您不能保持缩进清洁,请运行代码:http://jsbeautifier.org/ ...