Проверка создания объекта Coffeescript - PullRequest
0 голосов
/ 05 марта 2012

Можно ли отменить создание объекта в coffeescript, если определенные критерии не выполнены?Я хочу сделать что-то вроде этого:

class Foo
  constructor:(@name) ->
    return false if !name

withName = new Foo("bar") #withName -> obj
noName = new Foo #noName -> false

Но с этим кодом объект все еще создается.Каков наилучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 05 марта 2012

Единственный способ сделать это - вызвать исключение из конструктора:

class Foo
  constructor:(@name) ->
    throw new Error('Name must be specified') if !name

Однако в стилистическом плане исключения обычно не используются в JS.

2 голосов
/ 05 марта 2012

Вам необходимо проверить условия проверки на сайте вызова, внутри конструктора далеко до поздней.

Взгляните на скомпилированный 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();
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...