对象中的属性

一、数据属性(数据描述符)

(1)**configurable:**表示能否通过delete删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为true。
(2)**enumerable:**表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,如果直接使用字面量定义对象,默认值为true。
(3)**writable:**能否修改属性的值,如果直接使用字面量定义对象,默认值为true。
(4)**value:**该属性对应的值,默认为undefined。

二、访问器属性(存取描述符)

(1)**configurable:**和数据属性的[[Configurable]]一样,表示能否通过delete删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为true
(2)**enumerable:**和数据属性的[[Configurable]]一样,表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,如果直接使用字面量定义对象,默认值为true
(3)**get:**一个给属性提供 getter 的方法(访问对象属性时调用的函数,返回值就是当前属性的值),如果没有 getter 则为 undefined。该方法返回值被用作属性值。默认为 undefined
(4)**set:**一个给属性提供 setter 的方法(给对象属性设置值时调用的函数),如果没有 setter 则为 undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认为 undefined。

在对象中添加存取描述符属性
// 定义一个对象obj
let obj = {}
// 定义一个变量a
let a = 1;
// 定义一个变量b
let b;
//为obj对象设置一个m属性
Object.defineProperty(obj, 'm', {configurable: true,enumerable: true,//添加存取属性,当读取属性值时,调用get方法get: function() {return a + 1;},//当设置属性时,调用set方法set: function(i) {a = i + 2;b = i + 1;}
})
console.log(obj.m); //调用属性的get方法,结果为2
//为属性从新设置一个值,此时会调用set方法
obj.m = 4; //参数i的值就是4
console.log(a); //打印结果为6,a=i+2;i的值是4,所以a=6
console.log(b); //打印结果为5,b=i+1;i的值是4,所以b=5

注意:
1.getter和setter可以不同时使用,但在严格模式下只其中一个,会抛出错误
2.数据描述符与存取描述符不可混用,会抛出错误

value不能和get和set同时使用。如下:

let obj = {}
let a = 1;
let b ;
Object.defineProperty(obj, 'm', {value:'123',//切记不能使用value和get,set同时使用,会报错get: function() {return a;},set: function(i) {b = i + 1;}
})
set是给属性赋值,get是取属性的值,get是得到 一般是要返回的 set 是设置 不用返回
// 定义一个函数person
function person() {// 定义一个变量age,值为18let age = 18;// 为当前函数定义一个personAge属性Object.defineProperty(this, "personAge", {//为其设置一个get访问器,当读取该属性时调用getget: function() {return age - 10;},//为其设置一个set访问器,当更新该属性时调用setset: function(v) {age = v;}})
}
//实例化person对象
let p = new person();
//读取personAge的值,此时会调用get中的方法
console.log(p.personAge); // 8
//重新为属性personAge设置一个值,此时会调用set中的方法
p.personAge = 1994;
console.log(p.personAge); //1984

有兴趣可以了解下对象的方法

Object(对象)中的属性相关推荐

  1. JS Object 对象中删除属性

    delete Object.property 或者 delete Object['property']

  2. C# 从Object对象中读取属性的值

    https://www.cnblogs.com/xbblogs/p/7739483.html 转载于:https://www.cnblogs.com/TTonly/p/11136307.html

  3. 实例对象的属性和原型对象中的属性重名问题 神奇的原型链 继承 继承案例

    实例对象的属性和原型对象中的属性重名问题 <!DOCTYPE html> <html lang="en"> <head><meta cha ...

  4. Java:比较两个对象中全部属性值是否相等

    点击关注公众号,实用技术文章及时了解 来源:xiaoer.blog.csdn.net/article/details/85005295 例如下述Java类: import java.io.Serial ...

  5. 对象、对象的属性、对象字面量、枚举对象中的属性、可变类型、变量和对象——JS对象

    目录 一.对象 二.对象的属性 三.对象字面量 四.枚举对象中的属性 五.可变类型 六.变量和对象 数据类型: 原始值:(不可变类型) 1.数值 Number 2.大整数 BigInt 3.字符串 S ...

  6. js给对象添加变量属性 js 更改对象中的属性名 数组对象中每个对象添加一个字段-map用法和forEarch用法

    js给对象添加变量属性 & js 更改对象中的属性名 & 数组对象中每个对象添加一个字段-map用法和forEarch用法 1.js给对象添加变量属性 1.js创建一个对象或者在原有对 ...

  7. java中判断对象中某个属性是否为空

    问题:java对象接受从数据库查出来的数据时,对对象的某一属性进行操作,在操作属性中存储的数据中不对进行检查,会出现空指针异常的情况. 问题再现:新建一个实体类 public class Studen ...

  8. JS对象中的属性类型、属性定义和属性读取

    理解对象 ES5中的对象是指无序的属性的集合.(属性可以是基本值.对象和函数). 对象的属性类型有两种,一种是数据属性,是数据值的保存位置:另一种是访问器属性,包含getter和setter函数. 1 ...

  9. js之删除对象中的属性——delete、es6解构赋值、自执行匿名函数

    js之删除对象中的属性--delete.es6解构赋值.自执行匿名函数 实例 const person = {name: '李世民',gender: 'male',age: 24 };// 删除目标对 ...

  10. JS基础 -- 枚举对象中的属性

    /** 什么事枚举对象中的属性?* 下面以一个例子来慢慢解释*///创建一个对象var obj = {name: '唐一彩',age: 4000,gender: '男',address: '白马寺'} ...

最新文章

  1. linux mysql 数据目录迁移后不生效_mysql 本地数据目录迁移
  2. iOSAPP配置多环境
  3. 如何使用XML 配置的方式配置Spring?
  4. html语言可以干什么,JavaScript语言能做什么?
  5. 决策算法python_GitHub - nxety/MachineLearning_Python: 机器学习算法python实现
  6. 3d face paper
  7. 我的Android进阶之旅------gt;Android Studio 快捷键整理分享
  8. java ide下载_jGRASP|轻量级Java IDE(jGRASP)下载v2.0.4.03官方版 - 欧普软件下载
  9. 华为鸿蒙os公测需要多久,华为系统公测到正式版需要多久
  10. mongodb备份每一天的数据
  11. linux之mindoc搭建
  12. VBA-使用inputbox方法
  13. 创灵原始与鸿蒙,上古启示录
  14. 2023南京信息工程大学计算机考研信息汇总
  15. UESTC 1639 云中谁寄锦书来?雁字回时,月满西楼
  16. jadx在windows下的安装
  17. python js反混淆 eval(function(p,a,c,k,e,d){
  18. C语言:比较三个数(double类型)的大小
  19. 1407. 排名靠前的旅行者
  20. 蚂蚁链开发者实验室:开放全栈工具助力开发者低代码开发

热门文章

  1. 电脑病毒预防及常见中毒处理方式
  2. ionic如何使用第三方iconfont,以及图标微调 (转载)
  3. 梅科尔工作室深度学习第五课-CNN
  4. 01: 网络参考模型 、 数据封装与传输 、 数制与数制转换 、 IP地址与子网掩码
  5. docker 搭建frp内网穿透以及frp详细使用
  6. 【已更新】万能门店小程序独立版V5.1二开完整版 无限DIY+不限制小程序生成数量+数10款插件
  7. ISIS-P2P网络的LSDB更新
  8. java gnuplot,用 Gnuplot 绘制实验数据
  9. 用excel/WPS制作酷炫数据可视化大屏(附模板)
  10. 智安新闻丨乐山西部AI算谷正式投运,与智安网络成功签署战略合作协议!