我尝试使用以下代码在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中测试了相同的代码而没有任何问题,而且我在谷歌搜索了我们的代码而没有运气。
有什么想法吗?
有人要我包含生成的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);
答案 0 :(得分:2)
我把你的文件放在 lib / Error.coffee 中。然后我转换为Javascript:
coffee --compile --output dist lib
它创建了文件 dist / Error.js 。
然后我用这个简单的页面运行你的代码:
<!DOCTYPE html>
<html>
<body>
<script src="dist/Error.js"></script>
<script>
throw new ExtendableError('example error');
</script>
</body>
</html>
我在Linux下使用Firefox 46.0.1进行了一些测试,我没有发现任何问题,请查看我的屏幕截图:
我想这个问题出现在代码的另一部分,也许你正在捕捉异常并且你正在做一些事情。
如果问题在Firefox安装中仍然存在,并且您认为它与浏览器版本有关,则可以使用BrowserStack使用许多不同版本的浏览器和许多不同的操作系统来测试您的代码。 / p>
答案 1 :(得分:0)
我在ES6中编写了以下代码来制作可扩展的错误,它适用于Chrome,Firefox和Opera。
class CustomError extends Error{
constructor(msg){
super();
console.log(`CustomError: ${msg}`);
}
}
所以我认为问题在于coffeescript如何编译你的代码。