Вам необходимо проверить условия проверки на сайте вызова, внутри конструктора далеко до поздней.
Взгляните на скомпилированный javascript для класса:
Foo = (function() {
function Foo(name) {
this.name = name;
if (!name) return false;
}
return Foo;
})();
withName = new Foo("bar");
noName = new Foo;
}).call(this);
Идолжно быть немного яснее, почему это не работает.
Ключевое слово new
встречается за до вызова конструктора.
Как насчет чего-то вроде этого (НЕ ИСПЫТАНО)
runIf = (someVar, someDelegate) ->
someDelegate someVar if someVar
withName = runIf "bar", -> new Foo("bar")
noName = runIf null, -> new Foo()
Что компилируется в:
runIf = function(someVar, someDelegate) {
if (someVar) return someDelegate(someVar);
};
withName = runIf("bar", function() {
return new Foo("bar");
});
noName = runIf(null, function() {
return new Foo();
});