Я только что написал немного CoffeeScript и получил странную ошибку:
TypeError: Thing(param) is not a constructor
Но это так!И когда я попробую это в консоли:
var that = new Thing(param);
that.doesSomething();
После некоторой путаницы я просмотрел скомпилированный источник и обнаружил, что coffee
компилирует that = new Thing param
в that = new(Thing(param));
.Weird;Я никогда не видел этого раньше.Поэтому я сразу попробую: и тада!Теперь я могу повторить:
var that = new(Thing(param));
that.previousLineErrorsOut();
(Кстати, генератор CoffeeScript на своей домашней странице создает форму new Thing()
. График утолщается ...)
Я также пробую это с нативными конструкторами (new Worker("somefile")
и new(Worker("somefile"))
), которые ведут себя «правильно», то есть нет никакой разницы между этими двумя формами.
Так что я полностью запутался: что new()
?Почему это терпит неудачу в некоторых случаях? Почему CoffeeScript превращает мои прекрасно new
в new()
?