Я получаю сообщение об ошибке «TabsViewModel не конструктор» со следующим кодом. Я просмотрел другие сообщения об этой ошибке, но большинство из них предполагает, что имя функции используется где-то еще, но, как вы можете видеть, это очень простой пример, а TabsViewModel больше нигде не используется.

        define(['utils','ko','text!tmpl/risersandfallerstabs_partial.html','text!tmpl/errorPage_partial.html'], function(utils,ko,tmplrisersandfallerstabsStr,tmplErrStr) {
let tabsmodel = {}; 
$(function() {           
    tabsmodel = new TabsViewModel();
    ko.components.register('risersandfallerstabs', {
        viewModel: utils.createVM(tabsmodel), 
        template: tmplrisersandfallerstabsStr                      
    });
    utils.applyBindings(tabsmodel,'risersandfallerstabs');

    var TabsViewModel = (function(){
        let self = {};
        self.test = "123";
        return self;
    });
});
})

Почему я получаю эту ошибку?

4
ChrisMurray 28 Ноя 2017 в 02:17

2 ответа

Лучший ответ

Вы пытаетесь вызвать TabsViewModel до того, как он существует. Переместите определение функции над выполнением функции.

  var TabsViewModel = (function() {
    let self = {};
    self.test = "123";
    return self;
  });

  tabsmodel = new TabsViewModel();
5
Jason Spake 27 Ноя 2017 в 23:25

У меня была аналогичная проблема, проблема заключалась в том, что мой класс был анонимной функцией, а не нормальной функцией.

Не сработало:

var TabsViewModel = () => { ... }

Работал:

var TabsViewModel = function() { ... }
1
DavGarcia 2 Мар 2021 в 15:04