oen*_*lli 38 javascript constructor class
如果我有一个无法实例化的javascript类,那么构造函数应该返回哪个我可以测试.构造函数总是返回一个对象,所以如果构造函数失败,我就不能返回null.
function SomeClass(id) {
  if(typeof(id) === 'number' {
    // This is good
    this.id = id;
  } else {
    // This is bad
    // This return is ignored and an empty object is returned
    return null;
  }
}
var a = new SomeClass('badParam');
if(a){
  // is true even though the class expects a number.
}
// Could use this check
if(a.id !== undefined){
  // Do some stuff
}
但似乎应该有更好的方法.
Sla*_*ppy 36
最好抛出异常以通知调用者初始化失败并采取适当的操作.
返回代码很好,但是大多数情况下,调用者没有动机对返回代码执行检查.
我的建议是尽快打破并打破.这将使合同违规在测试期间非常明显.
Emm*_*ett 28
从构造函数返回任何非对象实际上与退出构造函数相同.(构造函数将返回一个新对象,prototype并指定了一个.)
因此,返回null,undefined或42来自构造函数是等效的.
有关详细信息,请查看ECMAScript规范(pdf)的第13.2.2节.
小智 13
我的第一个方法:
我的第二种方法:
null不起作用)我从来没有设计过构造函数(作为目标调用的东西new)来返回除"expected"类型的对象之外的任何东西.
快速失败,避免过于聪明,节省调试难以发现的错误的时间.
快乐的编码.
小智 5
使用我哨兵。我喜欢
return {invalid:true};
这看起来很干净:
var x = new X();
if (x.invalid) { // ...
(无法从构造函数返回非真值,因此您不能像使用另一种语言那样将new放入条件中。)