javascript对象的defineProperty方法解析

defineProperty是Object对象特有的方法,其作用是为对象定义新的属性和修改对象原有的属性。
调用形式为:Object.defineProperty(obj, prop, descriptor)
obj:属性所在的对象
prop:属性的名称
descriptor:描述符对象,表示属性的行为对象,该对象的属性为为以下的四种值,可设置其中一个或多个
1、configurable:表示能否通过delete删除属性,能否把属性修改为访问器属性(包含getter、setter属函数),默认为true。
2、enumerable:表示能否通过for-in循环返回该属性,默认为true。
3、writable:表示能否该修属性的值,默认为true.
4、value:包含属性的值。默认为true.
eg:修改属性

var person={
    name:'xiami'
};
person.name='xia';  //此处可以修改name的值
console.log(person.name);//xia
Object.defineProperty(person,'name',{writable:false}); //设置其属性不可以修改
person.name='macal'; 
console.log(person.name) //xia

其运行结果如下:
这里写图片描述

此外该函数也可以创建属性
eg:

var person={
    name:'xiami'
};
Object.defineProperty(person,'age',
    {
        configurable:true,   //如果不指定,默认为false
        value:22
    }
); 
console.log(person.age) //22

此外也可以用该方法定义访问器属性(用于读取或修改对象属性的属性,该属性包含getter和setter方法)
eg:

var book={
    _year:2004
};
Object.defineProperty(book,'year',
        {
           get:function(){
               console.log('调用get方法');
               return this._year
           },
           set:function(value){
               console.log('调用get方法');
               this._year=value;
           }
        }
);
//调用修改器year属性修改_year
book.year=2017;
//调用访问器属性year访问_year
console.log(book.year);

其运行结果如下:
这里写图片描述
可见,修改器属性相当于一个用于修改对象属性的属性
不过在实际运用中一般比较少用该方法。

发布了42 篇原创文章 · 获赞 26 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章