定义
在各面向对象语言里面如java,C#等语言开发中,为了提高安全性,经常要对类里面的私有变量进行get、set封装后供外部使用。而在javascript中
1 | Object.defineProperty(obj, prop, descriptor) |
也有类似getter、setter。并且可以给getter和setter绑定相应的事件处理。这样,每当prop发生改变(set)s或者执行被读取值(get)时就自动执行已绑定的相应的事件处理函数或者方法。
语法
1 | Object.defineProperty(obj, prop, descriptor) |
参数说明
obj
即将被定义新属性的对象
prop
即将定义的新属性
descriptor
对新属性的定义或者修改权限设设置的说明词
descriptor参数描述
configurable
如果是true的话,这属性的类型是可以更改或者这属性可以被删除。
默认是false。
enumerable
如果是true,这属性在枚兴举时是可见的。
默认是false。
descriptor还有下面这些可选的参数:
value
值可以是任意javascript值(如:number, object, function等等)。
默认是undefined。
writable
如果是true的话,就是可写的。
默认是false。
一个可访问的的descriptor还有下面这些参数:
get
一个函数服务于属性的getter的函数,或者如果没有getter就是undefined。这函数的返回将用作属性的值。
默认是undefined。
set
一个函数服务于属性的setter的函数,或者如果没有setter就是undefined。函数将于属性被赋新值时被触发。
默认是undefined。
简单的defineProperty事例代码
8 | Object.defineProperty(obj, "newAccessorProperty" , { |
10 | if (x !== this .oldPropValue) { |
11 | document.write( "in property set accessor" + newLine); |
12 | this .oldPropValue = x; |
14 | document.write( "值没变!" + newLine); |
18 | document.write( "in property get accessor" + newLine); |
19 | return this .oldPropValue; |
26 | obj.newAccessorProperty = 30; |
27 | document.write( "Property value: " + obj.newAccessorProperty + newLine + newLine); |
30 | document.write( "Property value: " + obj.newAccessorProperty + newLine + newLine); |
32 | document.write( "Property value: " + obj.oldPropValue + newLine); |
在Vue源码中有这样一个应用
转成原生的函数如下:
阅读:
3,163
作者: 博主
Talk is cheap, show me the code!
查看博主的所有文章