【发布时间】:2021-02-08 07:37:00
【问题描述】:
我需要一种方法来防止 window.location.replace() 被更改/覆盖(例如:window.location.replace = function(){ return "Hi" }。起初,我尝试了 Object.freeze(window.location.replace) 但这没有任何作用。
【问题讨论】:
标签: javascript html function object
我需要一种方法来防止 window.location.replace() 被更改/覆盖(例如:window.location.replace = function(){ return "Hi" }。起初,我尝试了 Object.freeze(window.location.replace) 但这没有任何作用。
【问题讨论】:
标签: javascript html function object
您可以使用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
【讨论】:
这里有两件事:
_ strict mode:允许Object.freeze 阻止对象被编辑。没有“严格模式”,Object.freeze只能防止添加、删除。
_Object.free在对象中只能生效1级。
所以解决办法是:
'use strict';
Object.freeze(window.location);
【讨论】: