You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
vara={}Object.defineProperty(a,"b",{value:123,writable:false,enumerable:false,configurable:false})console.log(a.b);//123复制代码以上非常重要哦。。并且以上理解对set 和 get 不起作用哦
这个方法了不起啊。。vue.js和avalon.js 都是通过它实现双向绑定的。。而且Object.observe也被草案发起人撤回了。。所以defineProperty更有必要了解一下了几行代码看他怎么用。第一次写文章,文章是别人的,练练手。
传入参数
目标对象
属性
或方法的名字
。特性
。(descriptor)前两个参数不多说了,一看代码就懂,主要看第三个参数descriptor,看看有哪些取值
descriptor
他又以下取值,我们简单认识一下,后面例子,挨个介绍,
只能为只读
了一旦为false,就不能再设置他的
(value,writable,configurable)在for...in循环中遍历
出来或在Object.keys
中列举出来。descriptor默认值
我们再看看第一个例子
console.log(a.b);//123复制代码我们只设置了 value,别的并没有设置,但是 第一次的时候可以简单的理解为(暂时这样理解)它会
默认帮我们把writable,configurable,enumerable。都设上值
,而且值还都是false
。。也就是说,上面代码和下面是等价
的的( 仅限于第一次设置的时候)configurable
总开关,
第一次设置 false 之后,,第二次什么设置也不行了
,比如说//error: Uncaught TypeError: Cannot redefine property: b复制代码就会报错了。。注意上面讲的默认值。。。如果第一次不设置它会怎样。。会帮你设置为false。。所以。。第二次。再设置他会怎样?。。对喽,,会报错
writable
如果设置为fasle,就变成
只读
了。。属性特性 enumerable 定义了对象的属性是否可以在 for...in 循环和 Object.keys() 中被枚举。
set 和 get
在 descriptor 中
不能 同时设置访问器 (get 和 set) 和 wriable 或 value
,否则会错,就是说想用(get 和 set),就不能用(wriable 或 value中的任何一个) set 和 get ,他俩干啥用的的,
这就是实现 observe的关键啊。。下一篇,,我会分析vue的observe的实现源码,聊聊自己如何一步一步实现$watch
参考
The text was updated successfully, but these errors were encountered: