首页 > 代码库 > 高程第六章--面向对象程序设计--属性类型

高程第六章--面向对象程序设计--属性类型

ES有两种属性类型:数据属性和访问器属性。

一、数据属性4个描述其行为的特性。

1:[[Configurable]]:表示能否通过delete删除属性从而重新定义属性。

2: [[Enumerable]]:表示能否通过for-in循环返回属性

3: [[Writable]]:表示能否修改属性的值

4:[[Value]]:包含这个属性的属性值

要修改属性默认的特性,必须使用ES5的defineProperty()方法

//"use strict";var person = {};Object.defineProperty(person,‘name‘,{    writable:false,//表示能否修改属性的值为true的话可以修改  默认false    value:"Nicholas"});console.log(person.name);//Nicholasperson.name = "Grey";//严格模式下会报错console.log(person.name);//Nicholas true的情况下"Grey"
// "use strict";var person = {};Object.defineProperty(person,‘name‘,{    configurable:true,//表示不能删除对象中的属性  默认为true    value:"Nicholas"});console.log(person.name);//Nicholasdelete person.name;//严格模式下会报错console.log(person.name);//Nicholas

//"use strict";var person = {};Object.defineProperty(person,‘name‘,{    configurable:false,//表示不能删除对象中的属性    value:"Nicholas"});//抛出错误Object.defineProperty(person,‘name‘,{    configurable:true,//一旦把属性定义为不可配置,就不能再把他变回可配置    value:"Nicholas"});

 

 

二:访问器属性 不包含数据值,他们包含一对getter和setter函数 但是不是必须的

1:[[Configurable]]:表示能否通过delete删除属性从而重新定义属性。

2: [[Enumerable]]:表示能否通过for-in循环返回属性

3: [[Get]]:在读取属性时调用的函数。默认为undefined。

4: [[Set]]:在写入属性时调用的函数。默认值为undefined。

访问器属性不能直接定义,必须使用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;console.log(book.edition);//2

_year前面的下划线是一种常用的记号,用于表示对象方法访问的属性。而访问器属性year则包含一个getter和setter的函数。getter函数返回_year的值。而setter函数通过计算来确定正确的版本。

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");//数据属性console.log(descriptor.value);//2004console.log(descriptor.configurable);//falseconsole.log(descriptor.get);//underfinedvar descriptor = Object.getOwnPropertyDescriptor(book,"year");//访问器属性console.log(descriptor.value);//underfinedconsole.log(descriptor.enumerable);//falseconsole.log(descriptor.get);//[Function: get]

 

高程第六章--面向对象程序设计--属性类型