]>
Commit | Line | Data |
---|---|---|
f0cfe83e AD |
1 | define("dojo/errors/create", ["../_base/lang"], function(lang){ |
2 | return function(name, ctor, base, props){ | |
3 | base = base || Error; | |
4 | ||
5 | var ErrorCtor = function(message){ | |
6 | if(base === Error){ | |
7 | if(Error.captureStackTrace){ | |
8 | Error.captureStackTrace(this, ErrorCtor); | |
9 | } | |
10 | ||
11 | // Error.call() operates on the returned error | |
12 | // object rather than operating on |this| | |
13 | var err = Error.call(this, message), | |
14 | prop; | |
15 | ||
16 | // Copy own properties from err to |this| | |
17 | for(prop in err){ | |
18 | if(err.hasOwnProperty(prop)){ | |
19 | this[prop] = err[prop]; | |
20 | } | |
21 | } | |
22 | ||
23 | // messsage is non-enumerable in ES5 | |
24 | this.message = message; | |
25 | // stack is non-enumerable in at least Firefox | |
26 | this.stack = err.stack; | |
27 | }else{ | |
28 | base.apply(this, arguments); | |
29 | } | |
30 | if(ctor){ | |
31 | ctor.apply(this, arguments); | |
32 | } | |
33 | }; | |
34 | ||
35 | ErrorCtor.prototype = lang.delegate(base.prototype, props); | |
36 | ErrorCtor.prototype.name = name; | |
37 | ErrorCtor.prototype.constructor = ErrorCtor; | |
38 | ||
39 | return ErrorCtor; | |
40 | }; | |
41 | }); |