【问题标题】:Uncaught typeerror: Object #<object> has no method 'method'未捕获的类型错误:对象 #<object> 没有方法“方法”
【发布时间】:2013-05-13 12:04:30
【问题描述】:

所以这里是对象'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);部分是因为我不断收到上面的错误

我做错了什么?我进行了搜索,但找不到我的问题的确切答案。

【问题讨论】:

    标签: javascript object methods set typeerror


    【解决方案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 创建的实例进行操作。

    【讨论】:

    • 这里的其他建议也可以,有很多方法可以实现这一点。 Usind 原型的优点是不会用每个实例填满内存。
    【解决方案2】:

    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/

    【讨论】:

      【解决方案3】:

      我从中得出的结论是,您需要在函数 playerTurnObj() 中返回对象 this。所以你的新代码看起来像:

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

      【讨论】:

        猜你喜欢
        • 2014-01-08
        • 2013-04-19
        • 2012-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多