如何使用jQuery访问属于函数内部另一个函数的对象的属性

How to access property of an object which belongs to another function inside a function using jQuery?

本文关键字:函数 何使用 对象 属性 另一个 内部 访问 属于 jQuery      更新时间:2024-06-14

我正在使用jQuery开发Tic-Tac-Toe游戏。我差不多做完了,但还是说到点子上。如何在squareClicked函数的末尾添加代码以检查是否有赢家?如果有,我想只将bgreen类分配给平方(td)。

$('table').on('click', squareClicked);
function squareClicked(e) {
    var $sqr = $(e.target);
    var player = $('.current-player').attr('id');
    if (!$sqr.attr('class')) {
        $sqr.addClass(player + '-marker');
        switchPlayer();
    }
}
function getBoard() {
    var board = [];
    $('td').each(function () {
        board.push(this.className[0]);
    });
    return board;
}
function checkWin() {
    var board = getBoard();
    // array of possible win sets
    var winArray = [
        [0, 1, 2], [3, 4, 5], [6, 7, 8],
        [0, 3, 6], [1, 4, 7], [2, 5, 8],
        [0, 4, 8], [2, 4, 6]];
    var winInfo = {
        win: false
    };
    // loop through the possible win sets
    for (var i = 0; i < winArray.length; i++) {
        // get the marks at the three win locations
        a = board[winArray[i][0]];
        b = board[winArray[i][1]];
        c = board[winArray[i][2]];
        // see if the same marker is at each location
        if (a && a === b && b === c) {
            winInfo.win = true;
            winInfo.play = winArray[i];
            winInfo.winner = a;
            return winInfo;
        }
    }
    return winInfo;
}

JS Fiddle

我在squareClicked函数中调用了checkWin();,但它根本不运行。

注意checkWin()返回一个具有3个属性的对象:win、play和winner;将结果分配给一个变量,然后检查获胜的真实性,以确定玩家是否刚刚获胜。

function squareClicked(e) {
    var $sqr = $(e.target);
    var player = $('.current-player').attr('id');
    if (!$sqr.attr('class')) {
        $sqr.addClass(player + '-marker');
        switchPlayer();
    }
    var winInfo = checkWin();
    if (winInfo.win) {
        console.log("You won!");
        // do win stuff  here
    }
}
function squareClicked(e) {
    var $sqr = $(e.target);
    var player = $('.current-player').attr('id');
    if (!$sqr.attr('class')) {
        $sqr.addClass(player + '-marker');
        switchPlayer();
    }
    var result = checkWin();
    if (result.win){
       // do something here ...
    }
}