[JS] 修改Navigator对象

在Js中,对于普通的对象,你可以通过下列方法来增加/修改/删除一个实例属性

obj = new Object;
// 增加属性
obj.name = 123;
// 修改属性
obj.name = 321;
//删除属性
delete obj.name

但是对于浏览器的navigator对象,却无法通过上述方式对属性进行操作

针对navigator对象,你可以采用下列的方式来操作它的属性

Object.defineProperty(obj, 'key', { //descriptor })

这个属性可以是添加或修改现有的属性,obj就是要修改的对象,key就是属性名,descriptor是一个对象,用来表明新添属性的一些特性,包括6个参数:

  • configurable: 默认false,表示此属性是否可用delete删除
  • enumerable:默认为false,表示此属性是否可被for...in、Object.keys遍历到
  • value:默认undefined,此属性的值,可以是任何JavaScript类型
  • writable:默认为false,此属性是否可被改写
  • get: 默认undefined,指定一个函数,当属性被调用时,此函数也被调用,默认为返回属性值
  • set:默认undefined,指定一个函数,当属性被赋值时,此函数也被调用,仅接受一个参数,参数为属性被赋的值

例如修改navigator的webdriver的值:

Object.defineProperty(window.navigator, 'webdriver', {value:'123'})

注:不知道为什么,我把webdriver的configurable的改为true后会自动删除这个属性

属性被删除后再调用value会报错,需要先把属性添加回来

添加的方法可以用

Object.defineProperty(window.navigator, 'webdriver', {get:function(){return 123}})

函数调用的时候会返回123,这个时候也可以用value属性来操作它

对于function(){return 123} 我们可以采用ES6中新增的箭头函数来执行(相当于匿名函数(类似于python中的lambda))

Object.defineProperty(window.navigator, 'webdriver', {get:()=>123)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值