对象中属性的类型

数据属性

在创建一个对象的属性的时候,可以这样子:

var person={};
person.name="Jack";

也可以这样子:

//数据属性
var person={};
Object.defineProperty(person,"name",{
    configurable:true,  //属性可以被配置
    enumerable:true,    //属性可以被for-in循环返回属性
    writable:true,      //属性可写
    value:"Jack"        //属性值
});
alert(person.name); //Jack
/*
注意,每次使用Object.defineProperty方法的时候,一定要把四个特性都配置好。
因为如果不对它们进行配置,则几个属性会被默认配置为false。
如果configurable被配置为false,则它不能被配置为TRUE,同时再调用Object.defineProperty方法修改除
writable之外的特性都会报错。
delete person.name也会返回false。
*/

使用第一种方法创建属性,则此属性默认为数据属性,其特性默认为true。


访问器属性

访问器属性不能直接定义,必须使用Object.defineProperty来进行定义。

//访问器属性

var book={
    _year:2004,
    edition:1
};
Object.defineProperty(book,"year",{
    set:function(newValue){
        if(newValue>2004){
            this._year=newValue;
            this.edition+=newValue-2004;
        }
    },
    get:function(){
        return this._year;
    }
});

book.year=2005;
alert(book.year);       //2005
alert(book.edition);     //2


读取特性
var des=Object.getOwnPropertyDescriptor(person,"name");
alert(des.configurable);
alert(des.enumerable);
alert(des.writable);
alert(des.value);


你可能感兴趣的:(javacript)