LoginSignup
2
2

More than 5 years have passed since last update.

shallow clone Error Object

Posted at

思いつきでエラーのクローン。使い道とか全く思いつかないけど

cloneError.js
;(function (global) {
    'use strict'

     var isBrowser = !! global.self
     var isWorker  = !! global.WorkerLocation
     var isNodeJS  = !! global.global

     function cloneError (err) {
        if (!(err instanceof Error)) throw new TypeError(
            ({}).toString.apply(err) + ' not instanceof Error')
        return new global[err.name](err.message)
     }

     isNodeJS ? (module.exports = cloneError)
               : (global['cloneError'] = cloneError)
})(this.self || global)
error.test.js
var test = require('tape')
var cloneError = require('cloneError')

test('shallow clone "Error"', function (t) {
    var error = new URIError('not found')
    var clone = cloneError(error)

    t.equal(error.toString(), clone.toString(), '.toString() -> ' + clone.toString())
    t.not(error, clone, 'originalError !== clonedError')
    t.end()
})

tap --tap error.test.js してみる

TAP version 13
# error.test.js
# TAP version 13
# shallow clone "Error"
ok 1 .toString() -> URIError: not found
ok 2 originalError !== clonedError
# tests 2
# pass  2
# ok
ok 3 ./error.test.js


1..3
# tests 3
# pass  3

# ok
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2