转自:http://www.cnblogs.com/yugege/p/4823863.html
1.ES5的属性特性包括下面六个:
configurable: 表示能否通过delete来删除属性从而重新定义属性,能够修改属性的特性,默认为true
enumberable: 表示是否能通过for-in循环返回属性。默认为true
writable: 是否可以修改属性, 默认为true
value: 包含这个属性的数据值。读取属性值时3,从这个属性读,写入属性时,把新值保存到这个位置。默认值为undefine.
getter: 在读取属性时,调用的函数
setter: 在写入属性时调用的函数
特别注意:一旦调用了Object.defineProperty方法之后,那些未定义的特性值除了configurable为false之外,其他都为undefined;
2.修改单个属性的特性:
必须使用Object.defineProperty()方法。这个方法接受3个参数: 属性所在的对象,属性的名字,和一个描述符对象。其中描述符对象的属性必须是:configurable, enumberable, writable,value.设置其中一个或者多个值,可以修改对应的特性值。
修改writable特性,设置为false从而使得属性值不可修改,如下所示:
var person = {}; Object.defineProperty(person, "name", { writable: false,//设置属性的特性为不可修改的 value: "Tom" //把name属性值设为Tom }); person.name = "Jany"; //试图把name属性值设置为Jany,但是失败了.非严格模式下会忽略此语句,严格模式则会报错的 console.log(person.name); //结果仍然为Tom
第2到第6行我们设置了name属性的值为Tom,并且把它的writable特性设置为false,然后,我们试图在地7行把它改Jany,但是,最终打印出来的结果仍然是zzy。
修改configurabel特性,设置为false使得属性无法被delete(删除),如下所示:
var person = {}; Object.defineProperty(person, "name", { configurable: false, //把configurable设置为false value: "Tom" }); console.log(person.name); //打印结果为Tom delete person.name; //试图删除name属性 console.log(person.name); //但是name仍然存在,打印出Tom
如果我们把configurable属性值改为true,则属性可以被delete
var person = {}; Object.defineProperty(person, "name", { configurable: true, value: "Tom" }); console.log(person.name); //打印出Tom delete person.name; //试图删除name属性 console.log(person.name); //删除成功,打印出udefined
另外,一旦,我们我们把某个属性的特性设置成了不可配置的,就再也不能把它变回可配置的了。此时,调用Object.defineProperty()方法修改除了writable之外的特性都会报错。
如下:
var person = {}; //把person.name属性的configurable设置为false; Object.defineProperty(person, "name", { configurable: false, value: "Tome" }); //然后试图重新把person.name属性的configurable设置为true;但是浏览器出现报错信息。 Object.defineProperty(person, "name", { configurable: true, value: "lyl" }); console.log(person.name);
我们在浏览器会看到如下的报错信息:
修改getter和setter特性
//定义一个对象book var book = { _year: 2004, //出版年份 edition: 1 //版本号 }; //定义year属性的特性 Object.defineProperty(book, "year", { //重写get方法,即如果我们试图book.year获取year值时,实质上是获取book._year的值 get: function() { return this._year; }, //重写了set方法,每当对book.year进行赋值时,则相应的修改book._year和book.edition的值 set: function(newValue) { if(newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } } }); book.year = 2005; console.log(book.edition); //2
3.同时定义(修改)多个属性的特性
由于定义多个属性的可能性很大,因此ES5有定义一个Object.defineProperties方法。利用这个方法可以通过描述符一次定义多个属性。这个方法接受两个对象的参数;第一个对象是要添加和修改器属性的对象,第二个对象的属性与第一个对象中要添加或者修改的顺序一一对应。
var book = {}; Object.defineProperties(book, { // 定义一个新的属性_year,并且他的值为2004 _year: { value: 2004 }, // 定义一个新的属性edition,并且他的默认值是1,而且属性值是可修改的 edition: { value: 1, writable: true// 可修改的 }, // 定义一个新的属性year,并且重写了他的get和set方法 year: { get: function() { return this._year; }, set: function(newValue){ if(newValue > 2004) { //alert("ok"); this._year = newValue; this.edition += newValue-2004; } } } }); book.year = 2006; console.log(book.edition);//3
4.读取属性的特性
读取属性的特性,使用Object.getOwnPropertyDescriptor方法
var book = {}; // 为该对象定义一些属性 Object.defineProperties(book, { _year: { value: 2004 }, edition: { value: 1, writable: true// 可修改的 }, year: { get: function() { return this._year; }, set: function(newValue){ if(newValue > 2004) { //alert("ok"); this._year = newValue; this.edition += newValue-2004; } } } }); //获取_year属性的特性 var descriptor1 = Object.getOwnPropertyDescriptor(book, "_year"); console.log(descriptor1.configurable); //false console.log(descriptor1.enumberable); //undefinded console.log(descriptor1.writable); //false console.log(descriptor1.value); //2004 console.log(descriptor1.get); //undefined console.log(descriptor1.set); //undefined console.log("\n"); //获取year属性的特性 var descriptor2 = Object.getOwnPropertyDescriptor(book, "year"); console.log(descriptor2.configurable); //false console.log(descriptor2.enumberable); //undefined console.log(descriptor2.writable); //undefined console.log(descriptor2.value); //undefined console.log(descriptor2.get); //function() console.log(descriptor2.set); //function(value)
相关推荐
本篇文章将深入探讨JavaScript对象属性排序的原理、方法以及注意事项。 首先,了解JavaScript对象的基本特性是至关重要的。在ECMAScript规范中,对象的属性访问速度并不依赖于属性的位置或顺序,因为它们内部是通过...
总结起来,`Java对象属性数据比较,返回变化数据`这个主题涉及到Java的面向对象特性,包括对象、属性、以及反射API的使用。`ObjectCompareUtil`工具类提供了一种通用的方式来比较两个对象的属性,而`...
总结来说,JavaScript中的对象和属性特性涉及原型链、内部特性、属性描述符和访问器等多个方面,理解并熟练运用这些概念是成为一名优秀的JavaScript开发者的关键。通过掌握这些知识,我们可以更好地控制对象的行为,...
总结来说,前端程序员面试中,JavaScript的基础语法、内置对象、对象属性特性和DOM/BOM操作是常见的考察点。熟练掌握这些知识点对于前端开发人员至关重要,不仅能确保面试成功,也有利于日常开发工作的高效进行。
关键词"常用对象属性"指的是在编程中经常使用的对象及其相关的特性或设置,而"VBA函数"则是指在Visual Basic for Applications(VBA)编程环境中使用的各种内置函数。"大全"和"超链接版"暗示这不仅是一个详尽的列表...
冻结属性是一个重要的概念,它涉及到JavaScript的原型继承、对象属性特性以及数据安全等方面。在这篇文章中,我们将深入探讨`defineFrozenProperty`库的工作原理,以及在实际开发中的应用。 首先,我们需要了解...
封装是指将对象的状态(属性)和行为(方法)包装在一起,并对外部提供一个有限的接口来访问这些状态和行为的过程。封装的主要目的是为了增强代码的安全性和可维护性: - **数据封装**:隐藏对象的内部状态,只有...
节点对象属性** - `childNodes`: 返回当前节点的所有子节点集合。 - `firstChild`: 返回当前节点的第一个子节点。 - `lastChild`: 返回当前节点的最后一个子节点。 - `nextSibling`: 返回当前节点的下一个同级节点...
接下来是属性,它是对象的特性或状态。例如,`Range`对象的`Value`属性代表该区域的数值,`Font`属性则包含了字体的样式、大小和颜色等信息。你可以读取或设置属性值来改变对象的状态。例如,`Range("A1").Value = ...
"动物特性的面向对象描述"这一主题,旨在探讨如何在Java中用面向对象的方式表示和处理动物的特性。 1. 类(Class)与对象(Object) - 类是创建对象的蓝图,它定义了一组具有相同属性(数据成员)和行为(方法)的...
- **属性**:属性是对象的状态,即对象中存储的数据。 - **方法**:方法是对象的行为,是与对象相关的操作或函数。 2. **在AM600上的面向对象编程** 在汇川AM600 上,开发者可以利用Codesys 提供的面向对象特性...
首先,JavaScript对象可以包含属性和方法,其中属性是键值对,表示对象的特征,方法是属性值为函数的对象属性,表示对象的行为。属性的键(key)是字符串,包括空字符串。而属性的值(value)可以是任何数据类型,...
2. **属性(Property)**:属性是对象的特性,用于描述对象的状态。在ASP中,每个对象都有自己的属性,可以设置或获取。以 `Response` 对象为例,`Response.Buffer` 是一个属性,控制是否先将整个页面内容缓存在内存中...
5. 属性特性:JS对象有读写、只读、不存在等属性特性,可以通过 `Object.getOwnPropertyDescriptor()` 获取。 二、属性类型 1. 数据属性:包含数据值的属性,具有 `configurable`、`enumerable`、`writable` 和 `...
**继承**是面向对象的另一个关键特性,它允许一个类(子类)继承另一个类(父类)的属性和行为。这提供了代码重用和层次结构构建的能力。例如: ```java class Student extends Person { private int grade; // ....
本文将深入探讨JavaScript中的对象属性,包括它们的功能、用途以及如何使用。 1. **anchor对象**:在HTML中,`<A NAME>`标记创建的锚点可以作为一个链接的目标。`anchor`对象是`document`对象的一个属性,它自身...
在VFP中,类是描述对象特性的模板,它包含了对象可能具有的属性、可以响应的事件以及能够执行的方法。对象是类的具体表现,每个对象都有其唯一的标识符,确保在程序中的唯一性。例如,一个命令按钮是表单上的对象,...
### JavaScript面向对象之访问对象属性的两种方式分析 #### 一、引言 在JavaScript中,面向对象编程是一种常见的编程范式,它可以帮助开发者更好地组织和管理代码。访问对象属性是面向对象编程中最基本的操作之一...
标题中的“对象属性函数参考”指的是VBA中关于对象的属性和函数的详细文档。属性是对象的特性,例如一个工作表的名称、单元格的值或字体颜色;函数则是可以执行特定任务的代码块,如计算、数据操作或界面控制。 ...