【发布时间】:2016-09-19 18:06:56
【问题描述】:
我正在尝试使用以下代码在 CoffeeScript 中创建一个可扩展的错误类:
class @ExtendableError extends Error
constructor: (message = '') ->
super message
Object.defineProperty @, 'message',
configurable: true
enumerable : false
value : message
writable : true
Object.defineProperty @, 'name',
configurable: true
enumerable : false
value : @.constructor.name
writable : true
Object.defineProperty @, 'stack',
configurable: true
enumerable : false
value : (new Error(message)).stack
writable : true
当我尝试使用此代码在 Firefox 中引发以下错误之一时:
throw new ExtendableError('An error message');
我只会将[object Object] 打印到控制台。
当我抛出一个内置错误时:
throw new Error('An error message');
我将所需的错误消息打印到控制台:Error: An error message。
应该注意Error.toString() 和ExtendableError.toString() 都可以正常工作。所以我完全不知道发生了什么。
我在 Chrome 中测试了相同的代码没有问题,我在 Google 中搜索了我们的代码,但没有运气。
有什么想法吗?
更新 1:
有人要求我包含生成的 JavaScript 代码。所以这里是:
// Generated by CoffeeScript 1.10.0
(function() {
var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
this.ExtendableError = (function(superClass) {
extend(ExtendableError, superClass);
function ExtendableError(message) {
if (message == null) {
message = '';
}
ExtendableError.__super__.constructor.call(this, message);
Object.defineProperty(this, 'message', {
configurable: true,
enumerable: false,
value: message,
writable: true
});
Object.defineProperty(this, 'name', {
configurable: true,
enumerable: false,
value: this.constructor.name,
writable: true
});
Object.defineProperty(this, 'stack', {
configurable: true,
enumerable: false,
value: (new Error(message)).stack,
writable: true
});
}
return ExtendableError;
})(Error);
}).call(this);
【问题讨论】:
标签: javascript firefox exception coffeescript console