我有Error
的Coffeescript子类。以下CoffeeScript脚本
class MyError extends Error
constructor: (message, @cause) ->
super message
myError = new MyError 'This is the error message!'
console.log myError instanceof MyError
console.log myError instanceof Error
console.log "'#{myError.message}'"
console.log myError.message == ''
显示器
true
true
''
true
在Node.js v0.10.20下。
为什么myError
的消息属性为空?
答案 0 :(得分:2)
明确设置@message
作品
class MyError extends Error
constructor: (@message,@cause)->
Error.captureStackTrace(@,@)
coffee> ee=new MyError 'test'
{ message: 'test', cause: undefined }
coffee> "#{ee}"
'Error: test'
coffee> ee.message
'test'
coffee> ee instanceof MyError
true
coffee> ee instanceof Error
true
coffee> throw new MyError 'test'
Error: test
at new MyError (repl:10:11)
...
当另一个类构建在super
上时, MyError
可以正常运行
class OError extends MyError
constructor: (msg)->
super msg
@name='OError'
以下内容显示正确的消息,util.isError
为真,instanceof Error
为真,但不是instanceof Error1
。所以它是Error
的专用构造函数,而不是'子类'。
class Error1 extends Error
constructor: (@message)->
self = super
self.name = 'Error1'
return self
这适用于node: '0.10.1', 'coffee-script': '1.6.3'
bjb.io
文章中的最后一个例子是(在Coffeescript中):
CustomError = (msg)->
self = new Error msg
self.name = 'CustomError'
self.__proto__ = CustomError.prototype
return self
CustomError.prototype.__proto__= Error.prototype
# CustomError::__proto__= Error:: # I think
满足所有测试,util.isError
,instanceof Error
,instanceof CustomError
,"#{new CustomError 'xxx'}"
。