未设置错误的子类中的属性

时间:2013-10-17 08:53:32

标签: node.js coffeescript

我有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的消息属性为空?

1 个答案:

答案 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.isErrorinstanceof Errorinstanceof CustomError"#{new CustomError 'xxx'}"