hasOwnProperty
hasOwnProperty
=> Object.prototype.hasOwnProperty() ->所有实例对象都可以访问
作用: 判断属性或方法是不是对象本身自带的 => 沿原型链上查找的方法不是它自身的
Object.defineProperty
作用:
- 给对象动态添加属性
- 将对象属性绑定到另一个对象上
- 数据劫持-监听对象数据变化,实现数据变化自动更新界面
语法:
Object.defineProperty(obj,属性,{})
数据劫持
概念: 将obj对象的属性通过Object.defineProperty方法绑定到vm对象上,转变为getter和setter方法。vm对象数据发生变化,自动更新界面
<div>内容</div>
<script>
let obj = {
message:''
}
let vm = {}
for(const key in obj){
Object.defineProperty(vm, key, {
get(){
return obj[key]
},
set(value){
obj[key] = value
// 更新div内容
document.querySelector('div').innerHTML = value
}
})
}
代理proxy
代理proxy应用:通过Proxy代理目标对象obj,实现数据劫持-通过代理对象proxy改变目标对象属性时,在get,set捕获器方法中做一些处理,比如更新界面。
代理proxy与Object.defineProperty的区别
Object.defineProperty 处理数组要特殊处理,代理Proxy直接处理。