Vue.js比较好用的一点是双向数据绑定,而双向数据绑定的实现就是Object.defineProperty(),在探索这个方法之前,我们先用代码实现一个简易的数据响应。
这里当我们修改data.info的值的时候就会动态的反馈到HTML元素上。这里的核心就是set定义了在给data对象设置值的时候会自动执行set中的代码,从而达到了数据绑定的效果。起到了一个触发器的效果。不过这也仅仅只是一个简易版本的示例代码,实际上Vue.js在实现双向数据绑定的时候还有用到Wacher和Directive,我们这里将不再进行拓展。那么接下来,我们就一起探索一下Object.defineProperty()的一些东西吧。
Object.defineProperty(object, prop, descriptor)
属性描述符(descriptor)是对属性的描述,分为两类:
可选键值有
要设置的具体的值。可以是任何有效的JS值,默认值是undefined。
规定该属性是否可被赋值运算符(=)改变,默认值是false。
当我们去修改data.name的值的时候,因为writable为false,是不允许被赋值运算修改的。当然不设置writable的值也是一样的,因为其默认值就是false。
定义了对象的属性是否可以在for...in循环和Object.keys()中被枚举。其默认值是false。
当我们执行Object.keys(data)得到的就是['age', 'sex']。
主要是描述属性是否可以配置以及是否可以被删除。
当configrable被设置为false的时候,对应的属性不可被重复定义或者删除。
当configrable被配置为true的时候,对应的属性可以被重复定义和删除。
就是属性的一个getter的方法,如果没有getter则为undefined。该方法返回值被作为属性的值。默认值是undefined。
就是属性的一个setter的方法,如没有setter则为undefined。该方法将接受唯一参数,这个参数就是新值。其默认值是undefined。
数据描述符对应的默认值如下:
在这里需要注意的是,我们使用两种不同的方式对属性进行赋值的时候,他们所使用到的默认值是不一样的,书写代码的时候是需要稍微注意的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。