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属性是只读的并不意味着你不能删除它。哈哈,我真的没想到它会这么容易。-哈哈,我真的没想到它会这么容易-