式設置@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'}"
。
看看這個http://stackoverflow.com/a/10807905/1961149指向問題https://github.com/jashkenas/coffee-script/issues/2111和https://github.com/jashkenas/coffee-script/issues/1966 問題出在Error構造函數的返回值上。 –
謝謝。在發佈此問題之前,我已經看到了這些鏈接。在閱讀了所有這些問題和評論之後,並且在嘗試了'instanceof'示例(這些示例都運行正常,據我所知)後,我認爲子類化沒有問題。 – k7sleeper
知道'util.isError(myError)'在Node.js下返回'false',我的問題的答案是[「反對子類錯誤'的參數」](http://bjb.io/development/2012/ 05//一個參數的抵-子類-的error.html)。 – k7sleeper