mirror of
https://github.com/luzhisheng/js_reverse.git
synced 2025-04-12 03:27:07 +08:00
42 lines
1.4 KiB
JavaScript
42 lines
1.4 KiB
JavaScript
const Navigator = function Navigator() {
|
||
throw new TypeError('Illegal constructor')
|
||
}
|
||
catvm.safefunction(Navigator);
|
||
|
||
Object.defineProperties(Navigator.prototype, {
|
||
[Symbol.toStringTag]: {
|
||
value: 'Navigator',
|
||
configurable: true,
|
||
}
|
||
})
|
||
|
||
Object.getOwnPropertyDescriptor_ = Object.getOwnPropertyDescriptor;
|
||
Object.getOwnPropertyDescriptor = function (tag, val) {
|
||
// tag[Symbol.toStringtag]
|
||
if (tag.toLocaleString() == '[object Navigator]') {
|
||
return undefined;
|
||
}
|
||
return Object.getOwnPropertyDescriptor_.apply(this, arguments)
|
||
}
|
||
|
||
////////////////原型-补环境-start////////////////
|
||
Navigator.prototype.plugins = []
|
||
Navigator.prototype.language = ['zh-CN']
|
||
Navigator.prototype.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
|
||
////////////////原型-补环境-end//////////////////
|
||
|
||
// 解决实例可以调用属性,但是原型对象不能调用属性
|
||
navigator = {}
|
||
navigator.__proto__ = Navigator.prototype
|
||
// 遍历原型
|
||
for (let prototype_ in Navigator.prototype) {
|
||
// 将所有原型属性值赋值给实例属性值
|
||
navigator[prototype_] = Navigator.prototype[prototype_]
|
||
// hook所有的get属性值,返回报错Illegal constructor
|
||
Navigator.prototype.__defineGetter__(prototype_, function () {
|
||
throw new TypeError('Illegal constructor')
|
||
})
|
||
|
||
}
|
||
|
||
navigator = catvm.proxy(navigator); |