vue双向数据绑定知识点总结(2)
所以说一旦使用Object.defineProperty()给对象添加属性;那么如果不设置属性的特性;则默认值都为false
var obj = {}; Object.defineProperty(obj,'name',{}); // 定义了心属性name后;这个属性的特性的值都为false;这就导致name这个是不能重写不能枚举不能再次设置特性的 obj.name = '书记'; console.log(obj.name); // undefined for(var i in obj){ console.log(obj[i]) }
总结特性:
- value:设置属性的值
- writable ['raɪtəbl] :值是否可以重写
- enumerable [ɪ'nju:mərəbəl]:目标属性是否可以被枚举
- configurable [kən'fɪgərəbl]:目标属性是否可以被删除是否可以再次修改特性
存取器描述
var obj = {}; Object.defineProperty(obj,'name',{ get:function(){} | undefined, set:function(){} | undefined, configuracble:true | false, enumerable:true | false }) 注意:当前使用了setter和getter方法;不允许使用writable和value两个属性
gettet&& setter
当设置获取对象的某个属性的时候;可以提供getter和setter方法
var obj = {}; var value = 'xiangha'; Object.defineProperty(obj,'name',{ get:function(){ // 获取值触发 return value }, set:function(val){ // 设置值的时候触发;设置的新值通过参数val拿到 value = val; } }); console.log(obj.name); // xiangha obj.name = '书记'; console,.log(obj.name); // 书记
get和set不是必须成对出现对;任写一个就行;如果不设置set和get方法;则为undefined
哈哈;前戏终于铺垫完成了
补充:如果使用vue开发项目;尝试去打印data对象的时候;会发现data内的每一个属性都有get和set属性方法;这里说明一下vue和angular的双向数据绑定不同
angular是用脏数据检测;Model发生改变的时候;会检测所有视图是否绑定了相关的数据;再更新视图
vue是使用的发布订阅模式;点对点的绑定数据
2.实现
<div id="app"> <form> <input type="text" v-model="number"> <button type="button" v-click="increment">增加</button> </form> <h3 v-bind="number"></h3> </div>
页面很简单;包含:
- 一个input,使用v-model指令
- 一个button,使用v-click指令
- 一个h3,使用v-bind指令。
我们最后也会类似vue对方式来实现双向数据绑定
var app = new xhVue({ el:'#app', data: { number: 0 }, methods: { increment: function() { this.number ++; }, } })
内容版权声明:除非注明,否则皆为本站原创文章。