0

のCoffeescriptサブクラスがありErrorます。次の 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 の下。

message プロパティがmyError空ののはなぜですか?

4

1 に答える 1

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

于 2013-10-17T20:04:38.203 に答える