1:属性类型
属性类型分为2种:数据属性和访问器属性
数据属性 有4个描述其行为的特性,我的理解就是对属性的配置,配置这个属性是否可以被delete,被重写,被枚举(使用for in),属性的值,四个特性为:
configurable: 是否可以被delete 默认为true
enumerable: 是否可以被枚举 意思就是使用for-in进行循环遍历时,这个属性是否可以被遍历到
writable: 是否可以被重写
value: 存放值的地方
例子:
var persion = {}
Object.defineProperty(person, "name", {
writable: false,
value: "Nicholas"
});
Object.defineProperty() :这个函数用于给对象添加属性,同时可以配置属性的4个特性,配置过程中如果不指定,configurable、enumerable 和writable 特性的默认值都是 false,可以对同一个属性进行多次配置,但是如果某次将configurable设置为false,那么之后都configurable enumerable writable这三个特性都不可以进行配置了
访问器属性
访问器属性与数据属性的区别是访问器属性没有value,和write,但是会多了一个set和get方法,例子如下:
var persion = {}
Object.defineProperty('persion', 'name',
set : function () {},
get: function (){}
)
这个函数在定义set和get方法时,不一定必须要全都定义,只定义set意味着这个属性不可被读取,只定义get,意味着这个属性不可被赋值
Object.defineProperties(): 这个函数可以为对象定义多个属性,具体用法就是第一个参数是对象本身,第二个参数也是一个对象,里面放着对属性的定义
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function(){},
set: function(newValue){}
}
}