javascrpt中属性描述符的理解与使用

属性描述符是ES5出现的概念。顾名思义:它用于描述对象里面的属性应该是什么样,例如是否只读,能否可枚举,能否可配置等。怎样?好理解吧。

既然是对象里面的属性相关,我们首先需要创建一个对象,才能了解对象里面的属性描述符。

创建对象

细说之前,先来看下对象的三种定义方式:

1. var obj = {};

2. var obj = new Object();

3. var obj = Object.create(proto,[description]);

这里第一种与第二种的方式其实没什么区别,只是第一种采用字面量对象的方式,而他们创建的对象都有一个默认的proto属性,这个属性指向了 Object.prototype。

而第三种,第三种有了两个参数,相当于我们在创建对象的时候可以创建我们配置的新对象,比如没有proto属性的新对象或者初始化一些不可修改的属性等等,我们主要看第三种定义对象的方法。

Object.create();

创建一个新对象 具体使用看这个 MDN:Object.create(),下面只是简单罗列下:

接收两个参数

Object.create(proto,[propertiesObject]);

参数

描述

proto

新创建对象的原型对象(即新对象的proto);可传null,定义一个没有原型对象的对象。必传参数,对象格式。

propertiesObject

要初始化的属性的描述符。可选参数,对象格式

问题:

怎样使用Object.create()方法创建一个与{}拥有一样属性的对象?

Object.create(Object.prototype) 与 {} 与new Object() 就是一样的效果,这样都只有一个属性即:proto 指向 Object.prototype。

下面着重看下第二个参数:

第二个参数是一个对象,这个对象的属性也就是新对象的属性,不过属性对应的值却不是新对象属性对应的值。是不是有点绕,因为这个属性的值(值为对象)对应这个属性的描述符(终于出现本文的概念了)。

属性描述符分两种:数据描述符与存取描述符。

先看例子:

注意:如果第二个参数穿空对象,相当于没有传第二个参数作为 undefined。如果第二个参数对象采用数据描述符,只写一个value,则默认writable: false,configurable: false,enumerable: false,为不可写、不可删除、不可枚举。

修改对象

上面说完了新建对象,下面说下修改对象,即修改对象的属性:新增属性、修改属性、删除属性。

一般也有几种方法修改对象:

上面仅仅是操作属性的值,如果我想修改这个属性为不可以修改,该如何弄?

就需要用到下面的内置方法了。

Object.defineProperty();

在对象上添加/修改一个属性,并返回这个对象的引用。

参数

Object.defineProperty(obj,prop,descriptor);

参数

描述

obj

要操作的对象

prop

要添加或修改的属性名称

descriptor

该属性的描述符

上面出现了属性描述符的概念,老样子如果想仔细了解用法,看这MDN:Object.defineProperty()

下面简单看下这个方法:

查看属性描述符

内置方法里面提供了一个方法来查看属性的属性描述符。

Object.getOwnPropertyDescriptor()

参数:

Object.getOwnPropertyDescriptor(obj, prop)

参数

描述

obj

要操作的对象(对象类型)

prop

对象内属性名称(String类型)

好了,上面已经操作了设置属性描述符、修改属性描述符、查看属性描述符的功能,关于存取描述符介绍了有点少,有时间在搞吧。

java中的scr是什么意思,javascrpt中属性描述符的理解与使用相关推荐

  1. java最大文件描述符,java – 为什么JDK NIO使用这么多的anon_inode文件描述符?

    我正在使用Sun的JDK 1.6.0_26和NIO(使用Netty),在lsof中我看到数百个文件描述符是anon_inode: $lsof -np 11225 | fgrep -w anon_ino ...

  2. Java 实验报告 了解如何使用类及其成员的修饰符,理解类的继承性,掌握方法的继承、重载和覆盖

    班级软件16-2班 学号 3162052051734姓名梁振宇同组实验者 实验名称Java语言基础练习日期 2018年 05 月31 日 一.实验目的: 了解如何使用类及其成员的修饰符,理解类的继承性 ...

  3. Android-JNI开发系列《七》补充jni与java的数据类型的对应关系和数据类型描述符

    人间观察 人只有不为生存而烦恼的时候,才会追求真正想要的东西. 在前面的几篇文章中有涉及到Java和JNI的通信,比如异常回调,Java和JNI的互相调用等.其中都免不了在通信过程中需要知道Java基 ...

  4. Linux中文件描述符1,linux内核中的文件描述符(一)--基础知识简介

    原标题:linux内核中的文件描述符(一)--基础知识简介 Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blo ...

  5. Bottle 框架中的装饰器类和描述符应用

    2019独角兽企业重金招聘Python工程师标准>>> 最近在阅读Python微型Web框架Bottle的源码,发现了Bottle中有一个既是装饰器类又是描述符的有趣实现.刚好这两个 ...

  6. 简述linux内核中,Linux内核中的文件描述符(一)——基础知识简介

    2.文件描述符 下面进一步介绍进程对自己所访问的file对象的管理方法.linux中使用一个数组来管理进程打开的文件的file对象,数组中的每个元素都存放一个纸箱进程所打开的文件的file对象.既然用 ...

  7. linux内核中的文件描述符(四)--fd的分配--get_unused_fd

    linux内核中的文件描述符(四)--fd的分配--get_unused_fd Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123( ...

  8. linux内核中的文件描述符(一)--基础知识简介

    linux内核中的文件描述符(一)--基础知识简介 Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blog.cs ...

  9. OpenCV 4.5.1 - 新版本 中 BEBLID 描述符尝鲜 (基于 ubuntu / c++)

    时间:20210222 目录 文章目录 1. OpenCV 4.5.1 发布 1.1 参考资料 1.2 新特性 BEBLID 描述符 2. OpenCV 4.5.1 编译 (Ubuntu 18.04) ...

最新文章

  1. 四位先行进位电路逻辑表达式_计算机硬件基础:二进制半加器、全加器与加法电路...
  2. VIM技巧:显示行号
  3. 全国首个窄带物联网实验局落户福州 助力智慧城市建设
  4. 彻底剖析激光-视觉-IMU-GPS融合SLAM算法:理论推导、代码讲解和实战
  5. 《预训练周刊》第9期:TABBIE:表格数据的预训练表示、「视觉预训练神作」:不用图片却训出图像识别SOTA?...
  6. linux 3g 程序,ARM板和Linux上的3G配置详解
  7. Hadoop动态扩容,增加节点
  8. 【SICP练习】79 练习2.51
  9. 在Java 8之前,您编写了几行代码来对对象集合进行排序?
  10. BZOJ 4710 [Jsoi2011]分特产 解题报告
  11. Spring 的application.properties项目配置与注解
  12. ArcGIS API for Silverlight开发入门(2):一个基础地图实例
  13. SpringBoot中@Email报错解决
  14. vs2010报错:转换到 COFF 期间失败: 文件无效或损坏 解决方法
  15. ISP PIPLINE (六) AWB
  16. 9个实用PHP函数和功能
  17. 3-20模拟赛【果冻之王】题解
  18. 多线程练习(龟兔赛跑)
  19. arcmap制作地闪密度专题图
  20. 解决程序中出现小方块问题

热门文章

  1. contentType与dataType
  2. ContentType作用
  3. 重装系统发现有bitlocker(BitLocker的主要作用)
  4. boltzmann_推荐系统系列第7部分:用于协同过滤的Boltzmann机器的3个变体
  5. 抖音日活3.2亿,可能有 3.3亿用户在同一天内使用抖音吗?(泊松分布的Python实现)
  6. 畅享9p更新鸿蒙吗,荣耀智慧屏明天发布:9成首发鸿蒙 余承东亲临
  7. 第018课 ADC和触摸屏硬件原理详解及裸机编程
  8. 中国少儿编程教育行业投资趋势与前景规划建议报告2022年版
  9. 【mongoDB实战】聚合管道--$unwind
  10. html 弃用浏览器记住密码,html页面禁止自动填充浏览器记住的密码