【问题标题】:How can I prevent "window.location.replace()" from being overwritten?如何防止“window.location.replace()”被覆盖?
【发布时间】:2021-02-08 07:37:00
【问题描述】:

我需要一种方法来防止 window.location.replace() 被更改/覆盖(例如:window.location.replace = function(){ return "Hi" }。起初,我尝试了 Object.freeze(window.location.replace) 但这没有任何作用。

【问题讨论】:

    标签: javascript html function object


    【解决方案1】:

    您可以使用Object.defineProperty 使其不可写和不可配置:

    'use strict';
    
    Object.defineProperty(
      window.location,
      'replace',
      { value: window.location.replace }
    );
    
    // Throws in strict mode
    window.location.replace = function(){ return "Hi" };
    
    // In sloppy mode, the above assignment will fail silently

    【讨论】:

      【解决方案2】:

      这里有两件事:
      _ strict mode:允许Object.freeze 阻止对象被编辑。没有“严格模式”,Object.freeze只能防止添加、删除。
      _Object.free在对象中只能生效1级。

      所以解决办法是:

      'use strict';
      Object.freeze(window.location);
      

      【讨论】:

        猜你喜欢
        • 2017-12-19
        • 2020-07-23
        • 2018-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-14
        • 2018-01-22
        相关资源
        最近更新 更多