object.defineproperty作用可大了:

  该函数具有三个参数,obj,Pro,然后是描述符(通常以{})传入

  第一个参数:指的当然是对象,js定义对象就跟Python差不多,比如

    obj = {

        name :  "lebron"        

      }

  第二个参数:属性,比如刚刚上面这个对象的name

  第三个参数:描述符,这个可能就比较陌生了

  一个属性有四个描述,分别是value,writable,iterable,configurable,分别是值,可写的,可以遍历的,可以修改(删除)的。

  lebron就是刚刚属性的value,其他都是顾名思义

  好戏来了:

    属性还有两个属性,get(),set()两个方法,其实在我们之前写js的时候,如果获取一个属性的值,实则调用了他的get方法,设置值则是set方法

  这时候,一些别有心机的人就想到了,能不能干点事情呢在这个阶段?

  比如说get(value)的时候,我能不能拿这个value干点事?

  现在比如你有一个界面,这样的代码:

 

<h id="tset"></h>

<script>

    person = {
        name: "lebron"
    }
    Object.defineProperty(person,name,{
        set(value){
            var test = document.getElementById("test")   =======》获取节点
            test.innerText = value               ======》改变值
            person.name = value 
        }
    })
        
</script>

 

  这个代码干了啥呢?就是在你设置属性值得时候,我获取了一个节点,并且提前把这个值的变化插入了页面,是不是听起来很熟悉?

  是的,这就是Vue这个框架响应式原理的核心,很简单吧~