欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS之Object.defineProperty()方法

程序员文章站 2022-04-04 23:53:01
...

1.数据属性
JS之Object.defineProperty()方法
修改属性默认的属性,必须使用ECMAScript的Object.defineProperty()方法。这个方法接收三个参数:属性所在的对象、属性的名字和一个描述性对象。其中,描述符对象的属性必须是:configurable、enumerable、writabel、和value。设置其中的一或多个值,可以修改对应的特性值。

var person = {};
Object.defineProperty(person,"name",{
    writable:false,
    value:"zhangsan"
});
alert(person.name);//zhangsan
person.name = "lisi";
alert(person.name);//zhangsan

这个例子创建了一个名为name的属性,它的值“name”是只读的。这个属性的值是不可修改的,如果尝试为它指定新值,则在非严格模式下,赋值操作将被忽略;在严格模式下,赋值操作将会导致抛出错误。类似的规则也适用于不可配置的属性,如:
把configurable设置为false,表示不能从对象中删除属性

var person = {};
Object.defineProperty(person,"name",{
     configurable:false,
     value:"zhangsan"
 });
 alert(person.name);//zhangsan
 delete person.name;
 alert(person.name);//zhangsan

2.访问器属性
JS之Object.defineProperty()方法
访问器属性不能直接定义,必须使用Object.defineProperty()来定义

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

JS之Object.defineProperty()方法
JS之Object.defineProperty()方法

定义多个属性

var book = {};
Object.defineProperties(book,{
    _year:{
        value:2004
    },
    edition:{
        value:1
    },
    year:{
        get:function() {
            return this._year;
        },

    set:function(newValue) {
        if (newValue > 2004) {
            this._year = newValue;
            this.edition += newValue - 2004;
        }
    }
 }
});
book.year = 2005;
alert(book.edition);//2

以上代码在book对外上定义了两个数据属性(_year和edtion)和一个访问器属性(year),最终的对象与上面定义的对象相同。唯一的区别就是这里的属性都是在同一时间创建的

参考:《JavaScript高级程序设计(第3版)》