JS Proxy Pattern

2019-07-20 12:10发布

问题:

I use this code to override the window.alert function. The function replaces breaks by \r\n. It works fine in Firefox, but ofcourse not in IE. Im getting the error: Property or method not supported.

(function() {
  var proxied = window.alert;
  window.alert = function(txt) {
    txt = txt.replace(/<br>/g, "\r\n");
    return proxied.apply(this, arguments);
  };
})();

Please help me find the solution! Thank you

回答1:

I would do this, in case window.alert is not a "real" function in IE:

(function() {
  var proxied = window.alert;
  window.alert = function(txt) {
    txt = txt.replace(/<br>/g, "\r\n");
    return proxied(txt);
 };
})();

Sorry, untested, Does it work?



回答2:

This would be fine for native JavaScript functions but is highly dangerous with methods of host objects such as window. Host objects are not subject to the normal rules of native JavaScript objects, and can (and do) behave largely as they please, often differently in different browsers. Therefore I strongly recommend not pursuing this idea for window.alert or any other host methods.