【发布时间】:2016-01-11 07:52:56
【问题描述】:
我正在尝试将普通 ES5 闭包重写为 ES2015 类。该代码覆盖了 window.onerror 函数,并作为一个全局错误处理方法来记录日志。
我的旧代码如下所示。我想知道如何在 ES2015 中重写它。如何覆盖 Window.onerror?
(function() {
window.onerror = function(errorMessage, url, line) {
try {
if (typeof(url) === "undefined") {
url = "";
}
if (typeof(line) === "undefined") {
line = "";
}
// Avoid error message being too long...
if (errorMessage.length > 300) {
errorMessage = errorMessage.slice(0,300) + "...";
}
errorMessage = errorMessage.replace(/&/g, "%26").replace(/ /g, "+");
url = url;
line = line;
var parentUrl = encodeURIComponent(document.location.href);
// Set error details
var parameters = "error_message=" + errorMessage +
"&url=" + url +
"&line=" + line +
"&parent_url=" + parentUrl;
// Set path to log target
var logUrl = "xxx";
// Set error details as image parameters
new Image().src = logUrl + '?' + parameters;
} catch (e) {}
};
}());
编辑!
现在我正在尝试在 JS 类中重写它。所以我想我必须扩展 Window 类或类似的东西(我有 Java 背景)。但是 Window 不是我理解的类。这是我到目前为止所拥有的。
所以我需要帮助来覆盖用 ES2015 编写的 window.onerror 函数!
export const Logging = new class {
constructor() {
// todo
}
onerror(errorMessage, url, line) {
try {
if (typeof(url) === "undefined") {
url = "";
}
if (typeof(line) === "undefined") {
line = "";
}
// truncate error message if necessary
if (errorMessage.length > 300) {
errorMessage = errorMessage.slice(0,300) + "...";
}
// URI encoding
errorMessage = errorMessage.replace(/&/g, "%26").replace(/ /g, "+");
url = url;
line = line;
var parentUrl = encodeURIComponent(document.location.href);
// set error details
var parameters = "error_message=" + errorMessage +
"&url=" + url +
"&line=" + line +
"&parent_url=" + parentUrl;
// Set path to log target
var logUrl = "xxx";
// set error details as image parameters
var img = new Image().src = logUrl + '?' + parameters;
console.log(img);
}
catch (e) {}
}
}
/* ------------------------------------------------------------------------------------------------------------ */
export default Logging;
【问题讨论】:
-
ES2015 与
onerror回调这样的浏览器功能没有太大关系。您的代码现在到底有什么问题?什么不起作用? -
如何为属性分配新值在 ES2015 中没有改变。你还是
obj.property = newValue;。 ES2015 并没有改变一切。 90% 没有改变。 -
请看我的编辑!我添加了我当前的代码。如何覆盖 JS2015 类中的 Window.onerror 方法?
标签: javascript ecmascript-6 ecmascript-harmony