42 lines
1002 B
JavaScript
42 lines
1002 B
JavaScript
|
define("dojo/errors/create", ["../_base/lang"], function(lang){
|
||
|
return function(name, ctor, base, props){
|
||
|
base = base || Error;
|
||
|
|
||
|
var ErrorCtor = function(message){
|
||
|
if(base === Error){
|
||
|
if(Error.captureStackTrace){
|
||
|
Error.captureStackTrace(this, ErrorCtor);
|
||
|
}
|
||
|
|
||
|
// Error.call() operates on the returned error
|
||
|
// object rather than operating on |this|
|
||
|
var err = Error.call(this, message),
|
||
|
prop;
|
||
|
|
||
|
// Copy own properties from err to |this|
|
||
|
for(prop in err){
|
||
|
if(err.hasOwnProperty(prop)){
|
||
|
this[prop] = err[prop];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// messsage is non-enumerable in ES5
|
||
|
this.message = message;
|
||
|
// stack is non-enumerable in at least Firefox
|
||
|
this.stack = err.stack;
|
||
|
}else{
|
||
|
base.apply(this, arguments);
|
||
|
}
|
||
|
if(ctor){
|
||
|
ctor.apply(this, arguments);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ErrorCtor.prototype = lang.delegate(base.prototype, props);
|
||
|
ErrorCtor.prototype.name = name;
|
||
|
ErrorCtor.prototype.constructor = ErrorCtor;
|
||
|
|
||
|
return ErrorCtor;
|
||
|
};
|
||
|
});
|