create.js 980 B

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