视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
浅析ECMAScript中对象的两种属性
2020-11-27 19:33:29 责编:小采
文档

ECMAScript对象有两种属性,分别为数据属性和访问器属性,接下来我们就分别对着两种属性进行分析。

1、数据属性
数据属性包含一个数据值的位置。这个位置可以读取和写入值。数据属性有4个描述其行为的特性。
[ [ Configurable ] ] 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问属性。默认为true
[ [ Enumerable] ] 表示能否通过for-in循环返回属性。默认为true
[ [ Writable ] ] 表示能否修改属性的值。默认为true
[ [ Value ] ] 包含这个属性的属性值。读取属性的时候,从这个位置读取,写入属性的时候,把新值保存在这个位置。默认为undefined
eg:

var p = {};
Object.defineProperty(p, "name", {
 writable: false,
 value: 'nihao' 
})

2、访问器属性
访问器属性不包含数据值,他们包含一对儿getter和setter函数(不过,这两个函数都不是必须的)在读取访问器属性的时候会调用getter函数,这个函数负责返回有效的值。在写入访问器属性是,会调用setter函数并传入新值,这个函数负责决定如何处理数据
[ [ Configurable ] ] 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问属性。默认为true
[ [ Enumerable] ] 表示能否通过for-in循环返回属性。默认为true
[ [ Get ] ] 在读取属性时调用的函数,默认为undefined
[ [ Set ] ] 在写入属性时调用的函数,默认为undefined
eg:

var p = {get: 0};
Object.defineProperty(p, "name", {
 get: function (){
 console.log('get');
 return this.get;
 },
 set: function (newVal) {
 console.log('set');
 this.get = newVal;
 }
})

3、读取属性的特性
Object.getOwnPropertyDescriptor(属性所在的对象, 属性名称);
返回值是一个对象,访问属性configurable 、enumerable、get、set四个属性,
如果是数值属性,返回的对象属性有configurable 、enumerable、writable、value四个属性
备注:
Object.defineProperties()函数可以定义多个属性
eg:

var p = {get: 0};
Object.defineProperties(p, {"name", {
 get: function (){
 console.log('get');
 return this.get;
 },
 set: function (newVal) {
 console.log('set');
 this.get = newVal;
 }
}, "age": {
 writable: true,
 value: 11
 }
})

下载本文
显示全文
专题