数据劫持原理
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script>
let obj = {
name: 'zs'
}
// 数据劫持的核心属性
Object.defineProperty(obj, 'name', {
enumerable: true,
configurable: true,
get() {
// 每次获取对象的这个属性的时候,就会被这个get方法给劫持到
console.log('get执行了')
},
// 每次设置这个对象的属性的时候,就会被set方法劫持到
// 设置的值也会劫持到
set(newValue) {
console.log('set方法执行了');
console.log(newValue)
}
})
</script>
</html>
在浏览器中打开;然后再控制台输出obj.name
,会得到下面的结果显示:
obj.name
1.html:23 get执行了
undefined
接着再在控制台输出’obj.name = ‘ls’`,结果如如下所示:
obj.name="ls"
1.html:28 set方法执行了
1.html:29 ls
"ls"