未捕获的类型错误:对象#<object>没有'method'方法。

4

那么这里是对象 'playerTurnObj'

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

以下是我使用它的方式:

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

我试着让脚本在playerTurnObj()中执行setTurn()方法,以保存我正在制作的游戏中的“回合”。问题是,它没有执行turn.setTurn(1);这一部分,因为我一直收到上面的错误。

我做错了什么?我搜索过,但找不到与我的问题完全相符的答案。

3个回答

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;
    }
};

现在你的变量turn有两个方法setTurngetTurn,它们作用于你使用new创建的实例。

这里的其他建议也是可行的,有许多方法可以实现这一点。使用原型的优点是不会在每个实例中填充内存。 - crackmigg

1

setTurngetTurn 函数是私有的,因此它们返回 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/


0
我理解的是你需要在函数playerTurnObj()中返回对象this。因此,你的新代码将类似于:
function playerTurnObj(set_turn) {
    this.playerTurn=set_turn;
    function setTurn(turnToSet) {
        this.playerTurn=turnToSet;
    }
    function getTurn() {
        return this.playerTurn;
    }
    return this;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接