Javascript 如何在ES2015中重写窗口上的方法
我正试图将一个普通的ES5闭包改写成一个ES2015类。该代码覆盖window.onerror函数,并作为全局错误处理程序方法用于日志记录 我的旧代码是这样的。我想知道如何在ES2015中重写它。如何覆盖Window.onerrorJavascript 如何在ES2015中重写窗口上的方法,javascript,ecmascript-6,ecmascript-harmony,Javascript,Ecmascript 6,Ecmascript Harmony,我正试图将一个普通的ES5闭包改写成一个ES2015类。该代码覆盖window.onerror函数,并作为全局错误处理程序方法用于日志记录 我的旧代码是这样的。我想知道如何在ES2015中重写它。如何覆盖Window.onerror (function() { window.onerror = function(errorMessage, url, line) { try { if (typeof(url) ===
(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不是一个类。这就是我目前所拥有的。
所以我需要帮助来覆盖window.onerror函数,它是用ES2015编写的
这里唯一有用的是参数默认值。我在ES5中更改的所有其他内容都是错误的
window.onerror = function(errorMessage, url="", line="") {
try {
// Avoid error message being too long...
if (errorMessage.length > 303) {
errorMessage = errorMessage.slice(0,300) + "...";
}
var parentUrl = document.location.href;
// Set error details
var parameters = "error_message=" + encodeURIComponent(errorMessage).replace(/%20/g, "+") +
"&url=" + encodeURIComponent(url) +
"&line=" + encodeURIComponent(line) +
"&parent_url=" + encodeURIComponent(parentUrl);
// Set path to log target
var logUrl = "xxx";
// Set error details as image parameters
new Image().src = logUrl + '?' + parameters;
} catch (e) {}
};
ES2015与浏览器功能(如
onerror
回调)关系不大。您的代码现在到底有什么问题?什么不起作用?在ES2015中,如何为属性分配新值没有改变。您仍然需要obj.property=newValue代码>。ES2015并没有改变一切。90%未更改。请查看我的编辑!我添加了我当前的代码。我如何在JS2015类中重写Window.onerror方法?为什么要将整个处理程序的代码包装到try..catch中?@rd5:因为OP也这样做了,所以我没有更改它。如果我不得不猜测的话,它应该能够防止全局错误处理代码中的异常无限地触发自身。当然,在空的catch块中可能值得一提。
window.onerror = function(errorMessage, url="", line="") {
try {
// Avoid error message being too long...
if (errorMessage.length > 303) {
errorMessage = errorMessage.slice(0,300) + "...";
}
var parentUrl = document.location.href;
// Set error details
var parameters = "error_message=" + encodeURIComponent(errorMessage).replace(/%20/g, "+") +
"&url=" + encodeURIComponent(url) +
"&line=" + encodeURIComponent(line) +
"&parent_url=" + encodeURIComponent(parentUrl);
// Set path to log target
var logUrl = "xxx";
// Set error details as image parameters
new Image().src = logUrl + '?' + parameters;
} catch (e) {}
};