数据劫持 _ 简述版

数据劫持

+ 是一种给对象添加成员的方式
+ 语法 : Object.defineProperty( 给哪一个对象定义属性 ,  '键名' , { value: '值' } )

const obj = {}
// 没有被劫持的数据, 你可以随心所欲的想干啥干啥
// 你想添加就添加, 想改就改, 想删就删, 想访问就访问 
obj.age = 18

// 给 obj 这个对象添加一个叫做 gender 的成员
Object.defineProperty(obj, 'gender', {
// value 就是给 gender 成员的值
  value: '男',
})
console.log(obj)

|| ↓↓↓   ↓↓↓

   ↑ ↑ ↑ 


// 给 obj 这个对象添加一个叫做 gender 的成员
Object.defineProperty(obj, 'gender', {
// value 就是给 gender 成员的值
value: '男',
// 可枚举
enumerable: true
})
console.log(obj)
console.log(obj.age)
console.log(obj.gender)
console.log('age' in obj)
console.log('gender' in obj)

 


默认添加一个不可枚举 属性 : 
// 给 obj 这个对象添加一个叫做 gender 的成员
Object.defineProperty(obj, 'gender', {
// value 就是给 gender 成员的值
value: '男',
// 不可枚举
enumerable: false
})
console.log(obj)
console.log(obj.age)
console.log(obj.gender)
console.log('age' in obj)
console.log('gender' in obj)
for(let key in obj) {
	console.log(key);
}

 

不可枚举 : 被  for  in  循环 ,  遍历不出来  , 你可以访问 , 可以用 , 但就是遍历不出来

只有将 enumerable 的值 改为 :  true  ,  才可遍历出来

Object.defineProperty(obj, 'gender', {
value: '男',
// 可枚举
enumerable: true
})
console.log(obj)
console.log(obj.age)
console.log(obj.gender)
console.log('age' in obj)
console.log('gender' in obj)
for(let key in obj) {
	console.log(key);
}


   => " gender " 数据被劫持了 , 所以看不到

 

修改被劫持数据 " gender " 的值 :

// 数据劫持
Object.defineProperty(obj, 'gender', {
// 这个 get 函数 return 出来的内容, 就是赋值给 gender 的值
  get: function() { return '男' }
})
console.log(obj)
console.log(obj.age)
console.log(obj.gender)
// 我需要修改 gender 成员的值
obj.gender = '女'
console.log(obj.gender)

 


假如你想修改被劫持的数据的值 : 

// 数据劫持
Object.defineProperty(obj, 'gender', {
// 这个 get 函数 return 出来的内容, 就是赋值给 gender 的值
  get: function() { return '男' }
  // 这个 set 函数就是当你想修改 gender 这个成员的时候会触发的函数
  set(val) {	// 对象里函数的简写语法
    // 这里可以接受一个形参 : val  就是你想要修改的值
    console.log('你想改 gender 成员了')
    console.log(`你想把 gender 修改成 ${val}`)
  }
})
console.log(obj)
console.log(obj.age)
console.log(obj.gender)

  => 至于这个东西怎么修改 , 需要 使用 发布订阅

 理解例子 : 一个绑匪把你绑架了 , 你的同学想给你送个东西 , 是没有办法直接交到你的手里的 , 你的同学必须要把东西先给到绑匪 , 绑匪同意了 , 才会把东西交到你的手里 .

数据劫持就是我能捕获到你想改的这个行为 , 我也能捕获到你想把他改成什么 , 但就是不给你改 , 这就叫做 数据劫持 .  ( 这就是另外一种给对象添加成员的方式 )

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值