我尝试做一些简单的类型检查错误,并有以下代码:
function isError(x) {
return Error.isPrototypeOf(x)
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我用一个错误实例调用该函数,我会false这样:
isError(new RangeError) // false
Run Code Online (Sandbox Code Playgroud)
所以我启动了节点(好吧,io.js),并做了以下事情:
> Object.getPrototypeOf(Object.getPrototypeOf(new RangeError))
[Error]
Run Code Online (Sandbox Code Playgroud)
最后,如果我进行检查instanceof,它的工作原理如下:
> (new RangeError) instanceof Error
true
Run Code Online (Sandbox Code Playgroud)
那么,到底发生了什么?
isPrototypeOf并getPrototypeOf直接查看原型链,同时instanceof查看.prototype给定构造函数的属性.你需要使用:
function isError(x) {
return Error.prototype.isPrototypeOf(x)
}
Run Code Online (Sandbox Code Playgroud)
您的函数测试是否x继承自Error构造函数对象.
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |