Javascript:如何从window.navigator中正确删除属性?
Javascript: how to correctly delete property from window.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
对象("Illegal constructor"错误)
- 我无法创建新对象,只是将其
__proto__
属性 设置为 window.navigator.__proto__
(请求新对象的 appName
属性 将导致 "Illegal invocation"错误)。
谢谢。
无法删除(或更改)window.navigator
的任何属性,因为它是由 Web 浏览器创建和管理的只读对象。
由于 属性 属于 navigator
原型,您需要从原型中删除此 属性。
仅在 Chrome 中测试过。这在其他浏览器中可能不起作用,因为大多数 DOM 相关对象都是奇异的。
console.log(window.navigator.appName)
delete Object.getPrototypeOf(window.navigator).appName;
console.log(window.navigator.appName)
问题:如何从 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
对象("Illegal constructor"错误) - 我无法创建新对象,只是将其
__proto__
属性 设置为window.navigator.__proto__
(请求新对象的appName
属性 将导致 "Illegal invocation"错误)。
谢谢。
无法删除(或更改)window.navigator
的任何属性,因为它是由 Web 浏览器创建和管理的只读对象。
由于 属性 属于 navigator
原型,您需要从原型中删除此 属性。
仅在 Chrome 中测试过。这在其他浏览器中可能不起作用,因为大多数 DOM 相关对象都是奇异的。
console.log(window.navigator.appName)
delete Object.getPrototypeOf(window.navigator).appName;
console.log(window.navigator.appName)