Javascript 未捕获类型错误:对象#<;对象>;没有方法';方法';

Javascript 未捕获类型错误:对象#<;对象>;没有方法';方法';,javascript,object,methods,set,typeerror,Javascript,Object,Methods,Set,Typeerror,这是对象“playerTurnObj” function playerTurnObj(set_turn) { this.playerTurn=set_turn; function setTurn(turnToSet) { this.playerTurn=turnToSet; } function getTurn() { return this.playerTurn; } } 这就是我用它做的 var turn = new

这是对象“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()方法,以在我正在制作的游戏中保存一个“回合”。问题是,它不做旋转。setTurn(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
有两个方法
setTurn
getTurn
,它们对使用
new
创建的实例进行操作
setTurn
getTurn
函数是私有的,因此它们返回
未定义的
,而不是调用函数。你可以做:

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
setTurn
getTurn
方法,并可以按如下方式调用它们:

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

我从中了解到,您需要在函数playerTurnObj()中返回对象。因此,您的新代码将类似于:

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

这里的其他建议也很有效,有很多方法可以实现这一点。usindprototype的优点是不需要为每个实例填充内存。