如果某些標準不符合,是否可以取消在coffeescript中創建對象?我想要做這樣的事情:Coffeescript對象創建驗證
class Foo
constructor:(@name) ->
return false if !name
withName = new Foo("bar") #withName -> obj
noName = new Foo #noName -> false
但與代碼的對象仍然是創建。做這個的最好方式是什麼?
如果某些標準不符合,是否可以取消在coffeescript中創建對象?我想要做這樣的事情:Coffeescript對象創建驗證
class Foo
constructor:(@name) ->
return false if !name
withName = new Foo("bar") #withName -> obj
noName = new Foo #noName -> false
但與代碼的對象仍然是創建。做這個的最好方式是什麼?
您需要檢查調用站點的驗證條件,在構造函數內部已經晚了。
在該類的編譯的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();
});
做到這一點的唯一方法是從構造函數拋出一個異常:
class Foo
constructor:(@name) ->
throw new Error('Name must be specified') if !name
但是,作爲一種風格問題,異常在JS中並不常用。