我在构造函数中看到了这样的模式:
function Animal(name) {
if ( !(this instanceof Animal) ) {
return new Animal(name);
}
this.name = name;
}
或者更一般的形式:
function Animal(name) {
if ( !(this instanceof arguments.callee) ) {
return new arguments.callee(name);
}
this.name = name;
}
这样如果错误地Animal()
在没有new
关键字的情况下调用它,那么它仍然可以通过new Animal(name)
在代码内部调用来工作。但我想知道为什么要容忍糟糕的调用代码?以下不是更可取的吗?
function Animal(name) {
if ( !(this instanceof Animal) ) {
// throw an exception, alert, or console.log or console.error
}
this.name = name;
}
使程序员可以立即更正调用代码。
但我想知道每种方法,如果
- 如果异常被捕获但只是在调用堆栈的某个级别被忽略了怎么办?
- 如果是alert,如果在循环运行一千次,浏览器没有办法让用户选择不再显示alert,那么alert会弹出一千次。
- console.log 或 console.error... 如果程序员没有打开控制台怎么办?然后错误可能会溜走并被推送到生产服务器。
一种方法可能是使用 JSLint?但是,如果代码已经有几千行并且在 JSLint 中显示了许多警告,而我们目前无法修复所有警告,那么目前有什么好的方法可以很好地实现构造函数呢?