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这个框架响应式原理的核心,很简单吧~