[EcmaScript] Object.defineProperty

Object.defineProperty用了给对象创建一个新属性,或者修改一个已有的属性,
并返回这个对象。

Object.defineProperty(obj, prop, descriptor)

用赋值方式创建的属性,
可以被枚举(for...inObject.keys),值可以被修改和删除(delete)。
Object.defineProperty创建的属性,默认是不可变的(immutable)。

descriptor有两种:
数据描述符(data descriptor),访问器描述符(accessordescriptor)
它们都是普通的对象。

数据描述符访问器描述符都有以下属性:

configurable:false
该描述符是否可以被修改,该属性是否可以被删除
enumerable:false
对象是否可以枚举到该属性

数据描述符具有以下属性:
value:属性值

writable:false
该属性的值是否可以通过赋值方式修改

访问器描述符具有以下属性:

get:undefined

get函数的返回值,作为属性值
如果get:undefined或者不设置,则属性返回undefined

set:undefined

set函数接受一个参数,这个参数是对属性新赋的值
如果set:undefined或者不设置,则对属性赋值将不起作用

兼容性:
Firefox 4.0(2)
Chrome 5
IE 9[1]
Opera 11.60
Safari 5.1[2]

[1] In Internet Explorer 8 only on DOM objects and with some non-standard behaviors.
[2] Also supported in Safari 5, but not on DOM objects.

你可能感兴趣的:([EcmaScript] Object.defineProperty)