«TypeError: Недопустимый конструктор» в Firefox при запуске CoffeeScript - PullRequest
0 голосов
/ 09 июля 2019

Я получаю сообщение об ошибке «Ошибка типа: недопустимый конструктор» в журнале консоли при запуске этого кода CoffeeScript:

class Logger
    constructor (@name) ->

    log: (level, msg) ->
        console.log(level, @name, msg)

    debug: (msg) ->
        log('DEBUG', msg)

new Logger('foo')

JavaScript:

  Logger = (function() {
    class Logger {
      log(level, msg) {
        return console.log(level, this.name, msg);
      }

      debug(msg) {
        return log('DEBUG', msg);
      }

      info(msg) {
        return log('INFO', msg);
      }

    };

    constructor(function(name) {  // <<--- Firefox throws TypeError here
      this.name = name;
    });

    return Logger;

  }).call(this);

Вместо этого coffee долженсгенерируйте этот код:

Logger =  class Logger {
  constructor(name) {  // <<-- No function() here!
    this.name = name;
  }

  log(level, msg) {
    return console.log(level, this.name, msg);
  }

  debug(msg) {
    return log('DEBUG', msg);
  }

  info(msg) {
    return log('INFO', msg);
  }

};

Как я могу это исправить?

Пример работает в Chrome 75.

Firefox 67.

1 Ответ

0 голосов
/ 09 июля 2019

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

constructor (@name) ->

Должно быть

constructor: (@name) ->

Первое интерпретируется как вызов конструктора метода и передача егоанонимная функция (@name) ->.Это, кажется, запутало coffeescript, который обернул определение класса в немедленно выполняемую анонимную функцию, чтобы создать замыкание, из которого можно использовать this для присвоения имени.

Когда исправлено, весь ваш класс должен скомпилироваться с этим, чтонамного более разборчиво:

var Animal;

Animal = class Animal {
  constructor(name) {
    this.name = name;
  }

  move(meters) {
    return alert(this.name + ` moved ${meters}m.`);
  }

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...