描述对象创建验证



如果不满足某些条件,是否可以取消coffeescript中的对象创建?我想做这样的事情:

class Foo
  constructor:(@name) ->
    return false if !name
withName = new Foo("bar") #withName -> obj
noName = new Foo #noName -> false

但是使用该代码仍然可以创建对象。最好的方法是什么?

唯一的方法是从构造函数抛出异常:

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

然而,作为一个风格问题,异常在JS中并不常见。

您需要检查调用站点的验证条件,构造函数内部的验证条件太晚了。

看看为类编译的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();
  });

最新更新