4

So here's the object 'playerTurnObj'

function playerTurnObj(set_turn) {
    this.playerTurn=set_turn;
    function setTurn(turnToSet) {
        this.playerTurn=turnToSet;
    }
    function getTurn() {
        return this.playerTurn;
    }
}

and here is what I'm doing with it

var turn = new playerTurnObj();
turn.setTurn(1);

so I try to make the script do the setTurn() method in playerTurnObj() to save a 'turn' in a game I'm making. The problem is, it does not do the turn.setTurn(1); part because I keep getting the error above

what am I doing wrong? I searched, but I could not find an exact answer to my question.


There's no way to stop execution of your code as you would do with a procedural language. You can instead make use of setTimeout and some trickery to get a parametrized timeout:

for (var i = 1; i <= 5; i++) {
    var tick = function(i) {
        return function() {
            console.log(i);
        }
    };
    setTimeout(tick(i), 500 * i);
}

Demo here: http://jsfiddle.net/hW7Ch/

4

3 に答える 3

1

setTurnandgetTurn関数はプライベートであるため、関数を呼び出すのではなく戻りますundefined。できるよ:

function playerTurnObj(set_turn) {
    this.playerTurn=set_turn;
    this.setTurn = setTurn;
    this.getTurn = getTurn;

    function setTurn(turnToSet) {
        this.playerTurn=turnToSet;
    }
    function getTurn() {
        return this.playerTurn;
    }
}

次にpublic setTurngetTurnメソッドがあり、次のように呼び出すことができます。

var turn = new playerTurnObj();
turn.setTurn(1);

http://jsfiddle.net/Ht688/

于 2013-05-18T12:10:17.403 に答える
1

これは JavaScript の動作方法ではありません。「コンストラクター」関数には、のスコープ外では表示されないインライン関数が含まれていますplayerTurnObj。したがって、エラーメッセージが正しく述べているように、変数turnにはメソッドが定義されていません。setTurnおそらく、次のようなものが必要です。

function playerTurnObj(set_turn) {
    this.playerTurn=set_turn;
}

playerTurnObj.prototype = {
    setTurn: function(turnToSet) {
        this.playerTurn=turnToSet;
    },
    getTurn: function() {
        return this.playerTurn;
    }
};

これで、変数にはとで作成したインスタンスを操作するturn2 つのメソッドが含まれるようになりました。setTurngetTurnnew

于 2013-05-18T12:08:13.673 に答える
0

ここからわかることは、関数 playerTurnObj() でオブジェクト this を返す必要があるということです。したがって、新しいコードは次のようになります。

function playerTurnObj(set_turn) {
    this.playerTurn=set_turn;
    function setTurn(turnToSet) {
        this.playerTurn=turnToSet;
    }
    function getTurn() {
        return this.playerTurn;
    }
    return this;
}
于 2013-05-18T12:10:20.963 に答える