代码之家  ›  专栏  ›  技术社区  ›  stoesselleon

javascript未捕获类型错误-不是构造函数[已关闭]

  •  -3
  • stoesselleon  · 技术社区  · 6 年前

    我目前正在用MVC模式对一个项目进行编码。但我收到一条奇怪的错误信息,我无法解决。注意,我的编辑器(Atom,即使添加了linter)也不会抱怨我的代码。我现在在网上找不到类似的东西,因为大多数时候它只是简单的顺序错误,但我不认为我在这里做过。我用Chrome测试我的代码。

    /* eslint-env browser */
    /* global request */
    var Countdown = (function() {
      "use strict";
      var that = {},
      countdownController,
      countdownView;
    
      function onStartGamePressed(){
        countdownView.hideMenu();
      }
    
      function init() {
        // Die Initalisierung der Anwendung beginnt hier
        /* Die Anfrage an die Wiktionary-API können Sie nach diesem Muster gestalten
         * Die Methode request findet sich im globalen Scope und wird durch Einbindung
         * der Datei request.js bereitgestellt.
         */
         initCountdownController();
         initCountdownView();
    
        request({
          success: onWiktionaryResponseAvailable,
          error: null,
          url: "https://en.wiktionary.org/w/api.php?action=query&origin=*&format=json&titles=student",
        });
      }
    
      function initCountdownController(){
         countdownController = (new Countdown.CountdownController({
          //startGame: document.querySelector(".button start-game")
        })).init();
        countdownController.setOnStartGamePressedListener(onStartGamePressed);
      }
    
      function initCountdownView(){
        countdownView = (new Countdown.CountdownView({})).init();
      }
    
      function onWiktionaryResponseAvailable(result) {
        var obj;
        console.log(result);
        obj = JSON.parse(result);
        console.log(obj);
      }
    
      that.init = init;
      return that;
    }());

    我得到两个序列的错误(新倒计时…) 事先谢谢!

    /* global Countdown */
    
    Countdown.CountdownView = function(){
      "use strict";
      var that = {};
    
        function init(){
          return that;
        }
    
        function hideMenu(){
          document.getElementById("menu-screen").className = "hidden";
        }
    
        that.init = init;
        that.hideMenu = hideMenu;
        return that;
    };

    添加reffering countdownview.js的示例

    1 回复  |  直到 6 年前
        1
  •  1
  •   Leo    6 年前

    您没有为countdown.countdownController和countdown.countdownView定义任何构造函数,因此行 new Countdown.CountdownView() Countdown.CountdownController() 会抛出你的错误。

    编辑:

    您需要在countdownview.js和countdowncontroller.js中导出/导入定义。

    我也会改变 Countdown.CountdownView = ... 通过 CountdownView = ... 替换从中实例化它的行 new Countdown.CountdownView(...) 通过 new CountdownView(...)