javscript中的对象属性

2018-07-05  本文已影响0人  卧江流

属性类型

   // 创建一个Object的实例
   var person = new Object();
   person.name = 'xiaohua';
   person.age = 20;
   person.sayname = function() {
       alert(this.name);
   }

   // 对象字面量
   var person = {
       name: 'xiaohua',
       age: 20,
       sayname: function() {
           alert(this.name)
       }
   }

以上创建的这两个对象是一样的,都有相同的属性和方法,这些属性在创建时都带有一些特征值,javascript通过这些特征值来定义他们的行为。

定义多个属性

使用Object.defineProperties()方法可以用来一次定义多个属性的特性。这个方法接收两个对象参数,第一个对象是要添加和修改其属性的对象,第二个是要设置的属性对应的特性值对象。如下所示:

```
    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和edition)和一个访问器属性(year)

读取属性的特性

使用Object.getOwnPropertyDescriptor()方法可以取得给定属性的描述符。接收两个参数:属性所在的对象和要读取其描述符的属性名称,返回值是一个对象。例如:

``` 
    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
                }
            }
        }
    })
    var descriptor = Object.getOwnPropertyDescriptor(book, "_year"); 
    alert(descriptor.value) // 2004
    alert(descriptor.configurable) // false
    alert(typeof descriptor.get); //"undefined" 
    var descriptor = Object.getOwnPropertyDescriptor(book, "year"); 
    alert(descriptor.value) // undefined
    alert(descriptor.enumerable); //false 
    alert(typeof descriptor.get); //"function" 
```
    对于数据属性_year,value等于最初的值,configurable是false,get是undefined。对于访问器属性year,value等于undefined,enumrable是false,而get是一个指向getter函数的指针

主要参考: JavaScript高级程序设计(第3版)

上一篇 下一篇

猜你喜欢

热点阅读