Javascript:如何从window.navigator正确删除属性?
问题:如何从Javascript:如何从window.navigator正确删除属性?,javascript,navigator,Javascript,Navigator,问题:如何从window.navigator对象中删除appName属性(例如) console.log(window.navigator.hasOwnProperty("appName")); // -> false console.log(window.navigator.__proto__.hasOwnProperty("appName")); // -> true console.log(Object.getOwnPropertyDescriptor(navigator.
window.navigator
对象中删除appName
属性(例如)
console.log(window.navigator.hasOwnProperty("appName"));
// -> false
console.log(window.navigator.__proto__.hasOwnProperty("appName"));
// -> true
console.log(Object.getOwnPropertyDescriptor(navigator.__proto__, "appName"));
// -> {set: undefined, enumerable: true, configurable: true, get: ƒ}
问题:
Object.deleteProperty
这样的函数(但是有Object.defineProperty
)Navigator
对象(“非法构造函数”错误)\uuuuu proto\uuuu
属性设置为window.navigator.\uuuu proto\uuuu
(请求新对象的appName
属性将导致“非法调用”错误)谢谢。无法删除(或更改)窗口.导航器的任何属性,因为它是由web浏览器创建和管理的只读对象。无法删除(或更改)窗口.导航器的任何属性,由于它是由web浏览器创建和管理的只读对象。由于该属性属于
navigator
prototype,因此需要从prototype中删除该属性
仅在铬中测试。这在其他浏览器中可能不起作用,因为大多数DOM相关对象都是外来的
console.log(window.navigator.appName)
删除Object.getPrototypeOf(window.navigator.appName);
console.log(window.navigator.appName)
由于属性属于navigator
prototype,因此需要从prototype中删除此属性
仅在铬中测试。这在其他浏览器中可能不起作用,因为大多数DOM相关对象都是外来的
console.log(window.navigator.appName)
删除Object.getPrototypeOf(window.navigator.appName);
console.log(window.navigator.appName)
听起来像-删除window.navigator.appName解决了什么问题?您不能:window.navigator
是只读属性,不能修改。真正的问题是:为什么要这样做?window.navigator是只读的,它的子属性(如appName)也是只读的。如果您可以这样做,它将是delete window.navigator.appName
@Terry属性为只读并不意味着您不能删除它。听起来像-删除window.navigator.appName
解决了什么问题?您不能:window.navigator
是只读属性,无法修改。真正的问题是:为什么要这样做?window.navigator是只读的,它的子属性(如appName)也是只读的。如果您可以这样做,它将是delete window.navigator.appName代码>@Terry属性是只读的并不意味着你不能删除它。哈哈,我真的没想到它会这么容易。-哈哈,我真的没想到它会这么容易-