JavaScript Tic Tac Toe - functional but could be DRYer
The most un-DRY code is checking if someone has won. You could add the following code to help you

// Row class

var Row = function{
    this.cells = [];
}

Row.prototype.allSame = function(){
    return this.cells[0] == this.cells[1] &amp;&amp; this.cells[0] == this.cells[1];
}

// Expand the Board class
Board.prototype.getRow = function(num) {
    var row = new Row();

    // Horizontal rows
    if (num =&gt; 0 &amp;&amp; num &lt; 3) {
        row.cells.push(this.cells[3*num], this.cells[(3*num)+1], this.cells[(3*num)+2]);
        return row;
    }

    // Vertical rows
    if (num =&gt; 3 &amp;&amp; num &lt; 6) {
        row.cells.push(this.cells[num-3], this.cells[(num], this.cells[num+3]);
        return row;
    }

    // Diagonal rows
    if (num == 6) {
        row.cells.push(this.cells[0], this.cells[(5], this.cells[8]);
        return row;
    }

    if (num == 7) {
        row.cells.push(this.cells[2], this.cells[(5], this.cells[6]);
        return row;
    }

    return false;

};


Running on the assumtions that the first 3 horizontal rows are numbered from 0 to 2, the 3 columns from 3 to 5 and the 2 diagonals 6 and 7...

But I am not sure the amount of code you would save would be enough to make the change worth it, unless you are predicting adding bigger boards, beyond the classic 3x3.