ECMAScript 中有两种属性类型:数据属性和访问器属性。
一、数据属性
数据属性包含一个数据值的位置,在这个位置可以读取和写入值。它有 4 个描述其行为的特性。
(1)configurable:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认为 true。
(2)enumerable:表示能否通过 for-in 循环返回属性,默认为 true。
(3)writable:表示能否修改属性的值,默认为 true。
(4)value:包含这个属性的数据值。读取或修改属性时操作的都是这个位置,默认为 undefined。
要修改属性默认的特性,必须使用 Object.defineProperty() 方法。该方法接收三个参数:属性所在的对象、属性的名字和一个描述符对象。其中,描述符对象的属性必须是上面这几个特性的一种或多种。注意,一旦调用该方法,configurable、enumerable 和 writable 的默认值就会变为 false。例如:
var person1 = {};
Object.defineProperty(person1, "name", {
writable: false,
value: "Nicholas"
});
alert(person1.name); // "Nicholas"
person.name = "Greg";
alert(person1.name); // "Nicholas"
var person2 = {};
Object.defineProperty(person2, "name", {
configurable: false,
value: "Nicholas"
});
alert(person2.name); // "Nicholas"
delete person2.name;
alert(person2.name); // "Nicholas"
其中,person1 对象的 name 属性是只读的,它不能被修改。如果尝试修改它的值,则在非严格模式下会被忽略,而严格模式下会报错(其它特性也一样)。而 person2 对象的 name 属性是不可配置的,这表示不能删除和修改,而且也不能再变为可配置的。
二、访问器属性
访问器属性不包含数据值,它们包含一对 getter 和 setter 函数。在读取访问器属性时会调用 getter,在写入访问器属性时则调用 setter。当只定义 getter 时表示只读。访问器属性有如下 4 个特性。
(1)configurable:同数据属性。
(2)enumerable:同数据属性。
(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;
alert(book.edition); // 2
分享到:
相关推荐
本篇文章将深入探讨Qt C++属性类型如何提供给QML调用,并介绍相关的技术细节。 首先,理解Qt元对象系统是关键。这个系统是Qt库的核心部分,它为C++类提供了反射能力,允许在运行时检查类的信息,如方法、信号、槽和...
本讲座聚焦于数据可视化中的核心概念——数据对象及其属性类型。 首先,数据对象是构成数据集的基本单元,它们代表了现实世界中的实体。例如,如果我们在分析学生数据,每个学生就可以视为一个数据对象。数据对象...
本篇将深入探讨TypeScript接口的用途以及属性类型接口的应用。 1. **接口的基本使用** TypeScript的接口允许我们定义一个对象应该有的结构,这包括属性、方法和索引签名等。例如,我们可以定义一个名为`Person`的...
wepy属性类型检测插件 第一步:keycap_1: 工程目录下运行 npm install --save wepy-prop-types 如果你已经安装了yarn,可运行 yarn add wepy-prop-types 第二部使用:keycap_2: 在工程中导入: import {boolType,...
本文将详细讲解如何利用反射机制动态获取对象的属性名称及其数据类型,以C#语言为例,结合ASP.NET环境进行阐述。 首先,我们需要创建一个实体类,例如`Student`,这个类包含了姓名(UserName)、年龄(Age)和地址...
导出命令需要在windchill shell中执行: windchill wt.load.LoadFromFile -d loadFiles/ext2/ExportType.xml -u wcadmin -p wcadmin
ts的babel插件点亮的属性类型曾经厌倦了必须两次在属性装饰器中以及在TypeScript中编写两次点亮的属性的类型吗? 该插件根据字段的类型注释自动确定属性type的正确值。 如果设置了默认值,并且省略了类型注释(感谢...
主干接口Backbone 插件,为模型添加属性类型信息。注意:仍在积极开发中。 还没有正式发布任何内容! Backbone 中的模型没有其类型的概念。 它们可以被覆盖、手动和从服务器更新中覆盖。 Backbone.interface 插件在...
属性类型用一个基于数据类型的数字来表示,常见的属性类型会在后续章节中介绍。在MFT项中,同类型的属性可以同时存在多个。 1. 常驻属性的属性头: 常驻属性的属性头结构固定,包括属性类型、属性长度、常驻属性...
属性组织器可以将不同的属性类型组织在一起,例如,产品属性、设计属性、工艺属性等。这样可以使得属性之间的关系更加清晰,方便用户快速地查找和维护属性关系。 1.2 基本信息 在 Windchill 系统中,属性组织器的...
GrapesJS的全栈背景样式属性类型,可以添加图像,颜色和渐变。 需要GrapesJS v0.16.3或更高版本 概括 插件名称: grapesjs-style-bg 样式管理器属性 bg主要背景类型 color-linear像一个简单的颜色选择器,但与...
2. 属性类型(Attribute Type):属性类型指明了数据的性质,例如它可能是一个服务(Service)描述符、一个特征(Characteristic)描述符或者其他类型的属性。属性类型通常通过UUID(通用唯一识别码)来标识,UUID是...
5. **属性类型创建**:支持创建各种属性类型,包括一元属性、toggle 类、boolean 类、enum、float、int、string 类、矢量三元属性(如 XYZ transform 类)以及色彩颜色等。 6. **属性采集器**:通过 Attributes ...
NTFS中常见的属性类型包括: 1. **0x10 标准信息属性**:这是每个文件记录都包含的基本信息,如文件的创建时间、修改时间、访问时间、文件属性(如只读、隐藏、存档等)、文件版本、类ID、所有者ID、安全ID、文件...
`TypeDescriptor`提供了一种扩展.NET类型信息的方式,而`GridEntry`则表示`PropertyGrid`中的一个属性项。以下是一个简单的步骤概述: 1. 创建一个自定义对象,包含你希望在`PropertyGrid`中显示的属性。 2. 实现`...
属性类型一般有效益型、成本型、固定型、偏离型、区间型、偏离区间型等,其中效益型属性是指属性值越大越好的属性,成本型属性是指属性值越小越好的属性,固定型属性是指属性值越接近某个固定值越好的属性,偏离型...
- **属性类型的兼容性**:CATIA支持多种属性类型,包括字符串、数字、日期等。在读取属性时,应确保VB脚本能够正确处理这些不同类型的数据。 总之,利用VB读取CATIA零件属性是一项实用而强大的技能,它不仅能够提高...
这里,`elementName`是元素名称,`attributeName`是属性名称,`ID`表示属性类型,`#REQUIRED`表示该属性为必需。 2. IDREF类型属性取值设置 IDREF类型的属性用于引用ID类型属性的值。它允许我们在一个元素中引用...
将该属性类型改为“文本”。 5. **保存更改**。现在,这个文本属性可以正常使用了。 通过以上步骤,我们可以在ZenCart中有效地管理产品属性,不仅提高了产品信息的丰富度,也增强了用户体验。这对于提升网站的销售...