JS修改属性的默认特性(属性描述符)

来源:互联网 发布:C语言下列叙述错误的是 编辑:程序博客网 时间:2024/05/21 10:45
  1. 数据属性,一共有四个属性描述符,分别为:
    [[Configurable]],表示能否通过delete删除属性从而重新定义属性,是否能修改属性的特性,或者能否把属性修改为访问器属性。
    [[Enumerable]],能否通过for-in循环返回属性。
    [[Writable]],能否修改属性的值。
    [[Value]],包含属性的值。

    使用对象字面量定义对象时, [[Configurable]]默认为true, [[Enumerable]]默认为true,[[Writable]]默认为true.

var person = {    name: "Jack",    age: 25,    job: "Student",    sayName: function() {        alert(this.name);    }}2、若要修改属性的描述符,使用方法Object.defineProperty();var person = {};Object.defineProperty(person,"name",{    value: "Jack"});var student = {    age: 25}

3、读取属性的特性,defineOwnPropertyDescriptor()

 1. 使用对象字面量创建的对象里的属性        Object.getOwnPropertyDescriptor(person,"name");//{value: "zhenglijing", writable: false, enumerable: false, configurable: false} 2. 使用defineProperty的属性         Object.getOwnPropertyDescriptor(person,"name");//{value: 25, writable: true, enumerable: true, configurable: true}

4、 1. 访问器属性,一共有四个属性描述符,分别为:
[[Configurable]],表示能否通过delete删除属性从而重新定义属性,是否能修改属性的特性,或者能否把属性修改为访问器属性。
[[Enumerable]],能否通过for-in循环返回属性。
[[Get]],读取属性时调用的函数。默认undefined
[[Set]],设置属性时调用的函数。默认undefined.
注意:访问器属性和数据属性不同的是,它的属性只能使用Object.defineProperty()定义。

//使用对象字面量定义一个对象var book = {    _year: 2004,//_下划线表示只能通过对象方法访问的属性。    edition: 1};Object.defineProperty(book,"year",{    get: function() {        return this._year;    },    set: function(newYear) {        if(newYear>2004) {            this._year = newYear;            this.edition += newYear-2004;        }    }})

4、定义多个属性,defineProperties()

book = {};//语法和Object.defineProperty()有些不同。Object.defineProperties(book,{    name: {        value: "围城"    },    _year: {        value: 2004    },    year: {        get: function() {            return this._year;        },        set: function(newYear) {            if(newYear>2004) {                this._year = newYear;            }        }    }})
原创粉丝点击