js高级Object对象

61 阅读1分钟

hasOwnProperty

hasOwnProperty

      => Object.prototype.hasOwnProperty() ->所有实例对象都可以访问   
                

作用: 判断属性或方法是不是对象本身自带的 => 沿原型链上查找的方法不是它自身的

Object.defineProperty

作用:

  1. 给对象动态添加属性
  2. 将对象属性绑定到另一个对象上
  3. 数据劫持-监听对象数据变化,实现数据变化自动更新界面

语法:

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直接处理。