属性描述对象

JavaScript 的内部数据结构,用来描述一个对象的属性的行为,操控它的行为。这被称为“属性描述对象”(attributes object)。

{
value:‘momei‘,      //存放该属性的属性值,默认为undefined
writable:false,      //存放一个布尔值,表示属性值是否可更改,默认值为true。
enumerable:true,    //存放一个布尔值,表示该属性是可枚举的,默认为true。
configurable:false,   //存放一个布尔值,表示“可配置性”,默认为true。控制属性描述的可写行、性。
get:undefined,      //存放一个函数,表示该属性的取值函数(getter),默认为undefined。
set:undefined       //存放一个函数,表示该属性的存值函数(setter),默认值undefined。
} 

Object.defineProperty() 方法接受三个参数,第一个是属性所在的对象,第二个是属性名(它应该是一个字符串),第三个是属性的描述对象。

Object.defineProperty(object, propertyName, attributesObject)

如果一次性定义或修改多个属性,可以使用Object.defineProperties() 方法。

Object.getOwnPropertyDescriptor()  方法可以读出对象自身属性的属性描述对象。

var infor = { name: ‘墨眉‘ };

Object.getOwnPropertyDescriptor(infor, ‘name‘);

// 输出 Object {value: "墨眉", writable: true, enumerable: true, configurable: true}

属性描述对象的属性,被称为“元属性”,因为它可以看作是控制属性的属性。

可枚举性(enumerable):

  • 只有可枚举的属性,才会被for...in循环遍历。
  • 原生集成的属性都是不可枚举的。
var o = {a: 1, b: 2};
o.c = 3;
Object.defineProperty(o, ‘d‘, {
  value: 4,
  enumerable: false
});
// 输出Object {a: 1, b: 2, c: 3, d: 4}

for(var key in o) {
    console.log(o[key]);
}

//输出 1,2,3      ( d 不可枚举 )

可配置型(configurable):

  • 可配置性(configurable)决定了是否可以修改属性描述对象。
  • 当configurable为false的时候,value、writable、enumerable和configurable都不能被修改。
var conf = Object.defineProperty({}, ‘p‘, {
  value: 1,
  writable: false,
  enumerable: false,
  configurable: false
});

Object.defineProperty(conf ,‘p‘, {value: 2})           // TypeError: Cannot redefine property: p

Object.defineProperty(conf ,‘p‘, {writable: true})       // TypeError: Cannot redefine property: p

Object.defineProperty(conf ,‘p‘, {enumerable: true})   // TypeError: Cannot redefine property: p

Object.defineProperties(conf ,‘p‘,{configurable: true})  // TypeError: Cannot redefine property: p

可写性(writable):

  • writable决定了属性的值(value)是否可以被更改。
var obj = {};
Object.defineProperty(obj, ‘a‘, {
  value: 37,
  writable: false
});

obj.a // 37
obj.a = 25;
obj.a // 37

Object.getOwnPropertyNames()  方法返回直接定义在某个对象上面的全部属性的名称,而不管该属性是否可枚举。

Object.prototype.propertyIsEnumerable() 判断一个属性是否可以枚举。

存取器(accessor)

  • 除了直接定义,属性还可以用存取器(accessor)定义。
  • 存值函数称为setter,使用set命令;取值函数称为getter,使用get命令。

控制对象状态

  • Object.preventExtensions() 可以是的一个对象无法再添加行的属性。

    • Object.isExtensible() 方法用于检查一个对象是否使用了Object.preventExtensions() 方法。也就是说,检查是否可以为一个对象添加属性。
  • Object.seal() 使得一个对象既无法添加新属性,也无法删除旧属性。
    • Object.isSealed() 方法用于检查一个对象是否使用了Object.seal() 方法
  • Object.freeze() 方法可以使得一个对象无法添加新属性、无法删除旧属性、也无法改变属性的值、使得这个对象实际上变成常量。
    • Object.isFrozen()方法用于检查一个对象是否使用了Object.freeze()方法。
时间: 2024-10-19 03:05:29

属性描述对象的相关文章

深入理解javascript对象系列第三篇——神秘的属性描述符

× 目录 [1]类型 [2]方法 [3]详述[4]状态 前面的话 对于操作系统中的文件,我们可以驾轻就熟将其设置为只读.隐藏.系统文件或普通文件.于对象来说,属性描述符提供类似的功能,用来描述对象的值.是否可配置.是否可修改以及是否可枚举.本文就来介绍对象中神秘的属性描述符 描述符类型 对象属性描述符的类型分为两种: 数据属性和访问器属性 数据属性 数据属性(data property)包含一个数据值的位置,在这个位置可以读取和写入值.数据属性有4个特性 [1]Configurable(可配置性

JS面向对象篇一、理解对象及属性特性(属性描述符)

本文内容 1.理解对象; 2.ECMAScript有两种属性类型:数据属性和访问器属性(getter和setter函数); 3.数据属性的属性特性:[[Configurable]].[[Enumerable]].[[Writable]].[[value]]; 4.访问器属性的属性特性:[[Configurable]].[[Enumerable]].[[get]].[[set]]; 5.Object.defineProperty().Object.defineProperties().Object

Asp.net MVC中三大描述对象之ActionDescriptor 以及继承类ReflectedControllerDescriptor

ActionDescriptor抽象类中几个基本的属性: ControllerName:被描述的Controller名称,去除后缀Controller的名称.例如:HomeController则为Home. ControllerType:属性类型为Type,很好理解为被描述Controller的类型. UniqueId:该属性是用来唯一标识当前描述的Controller的.在其唯有的保护的构造函数中赋值,则说明每一个描述每一个Controller都有唯一的UniqueId.UniqueId的 获

JavaScript里的Date 对象属性及对象方法--实现简单的日历

上网搜索"js 日历插件"就会出来各种效果的功能丰富的日历插件,很多都可以下载源码,然后根据各自的需求对源码进行修改就可以直接用了. 但今天讲的不是如何使用这些插件,而是讲如何实现一个很简单的只有当前这个月的日历,具体效果如下图:   ( 截图时间是 2017-7-27 ),下面展示一下实现的代码: .wrap { font-size: 0; } .weeks span { display: inline-block; font-size: 14px; width: 47px; hei

用表来管理SQLServer中的扩展属性(描述)

数据字典是个好东东,对于开发.维护非常重要. 但Sql Server中写描述确实不方便,如何化繁为简.批量地增加修改扩展属性呢? 增加2个表和5个存储过程.2个触发器.1个表值函数就好了. 把下面的SQL执行一遍生成相关的对象, 然后执行一下: 1. EXEC Proc_Util_Desc_GetColumnNameToDescTable , 生成表的描述对应记录 2. EXEC Proc_Util_Desc_GetTableNameToDescTable, 生成列的描述对应记录 3. 查看,

理解JavaScript中的属性描述符

我们把描述JavaScript中定义内部特性的属性叫做属性描述符 分为两大类:数据描述符和存取描述符 数据描述符是一个拥有可写或不可写的属性(Writable); 存取描述符不包含数据值,是一组拥有getter和setter属性的描述符: 描述符必须是这两者之一,不可能都是这两者: 数据描述符合存取描述符都具有以下的可选键值: configurable这个指的是描述,当属性的configurable的值为true的时候,该属性的描述符才可以改变,同时该属性可以从对象上被删除,默认值是false

python之属性描述符与属性查找规则

描述符 import numbers class IntgerField: def __get__(self, isinstance, owner): print('获取age') return self.num def __set__(self, instance, value): print('设置age值时') if not isinstance(value, numbers.Integral): raise ValueError('int need') self.num = value

DACL原理.控制文件的访问权限(文件,注册表.目录.等任何带有安全属性的对象.)

目录 一丶简介 1.DACL是什么. 2.如何创建一个自己控制的文件. 3.SDDL是个什么鬼. 二丶 编写SDDL 控制的文件 一丶简介 1.DACL是什么. DACL称为自主访问的控制列表.是应用程序开发必要且重要的部分.由于空DACL 允许对所有用户进行类型的访问.所以一般程序开发中都是传入NULL 比如创建文件 原型: HANDLE CreateFileA( LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSE

Java重要技术(13)内省之属性描述符PropertyDescriptor

1.1. 属性描述符(PropertyDescriptor) 可以使用PropertyDescrptor类来访问Java Bean的属性和方法. Object obj; Class beanClass = SampleBean.class; Object value; PropertyDescriptor propertyDescriptor; try { //创建对象 obj = SampleBean.class.newInstance(); //访问age属性. propertyDescri