`
kstgjfk403
  • 浏览: 30745 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ECMAScript5 Object对象和属性

阅读更多

对象和属性:
属性一共分成三类,分别是命名数据属性、命名访问器属性和内部属性,前两类属性可以在代码中直接使用,而后面一种属性是规范使用的内部表示。

命名属性一般有:
Value:表示该属性的值
Writable:表示该属性的值是否为只读的
Enumerable: 表示该属性是否可以被枚举,可以被枚举的属性可以通过 for-in 循环来获取到
Configurable:表示该属性是否可以被配置,为true则表示 该属性可以被删除、可以被转换为访问器属性。

命名访问器属性:该类属性没有Value和Writable特性,属性获取和设置则通过get和set特性(函数)来实现。

内部属性:作用是定义 ECMAScript 中的对象在不同情况下的行为,常用的内部属性有:
Prototype属性:每个对象都有内部属性Prototype,用来引用另外一个对象。
Class属性:用来声明对象的类别,通过 Object.prototype.toString 函数可以获取到Class属性的值,当需要判断一个对象是否为     数组时,可以使用代码 Object.prototype.toString.apply(obj) === '[object Array]'。

Object 对象是 ECMAScript 中非常重要的一个对象。Object 对象本身是一个函数,所以typeof Object值是 function
Object 函数既可以直接调用,也可以作为构造函数来创建新的对象: Object() 的作用相当于 new Object(),所以Object("Hello")和new Object("Hello")调用结果是相同的。

Object属性有如下几种:
Object.prototype:这个属性可以获取 ECMAScript 中内置的 Object 原型对象,并访问其中的属性。
Object.getPrototypeOf:这个函数可以获取 Object 类型对象的内部属性 [[Prototype]] 的值。
Object.getOwnPropertyDescriptor:这个函数用来获取 Object 类型对象自身所拥有的属性的描述信息。描述信息是一个 Object 类型的对象,其中包含了属性的特性值。
例如:
Object.getOwnPropertyDescriptor({val:1}, 'val')的执行结果是{"configurable":true,"enumerable":true,"value":1,"writable":true}。


Object.getOwnPropertyNames:该函数用来获取一个包含 Object 类型对象自身所拥有的属性名称的数组。
例如:
Object.getOwnPropertyNames({a:1, b:2});的执行结果是["a", "b"]。

Object.defineProperty:该函数用来在 Object类型对象中创建一个新的属性。在调用时除了属性的名称之外,还需要提供属性的特性值。如果该名称的属性在对象中已经存在,则更新已有的属性。
例如:
var obj = {};
Object.defineProperty(obj, 'val', {}); // 创建一个新属性,特性为默认值,且新属性是可以被枚举的
obj.val = 1;
Object.defineProperty(obj, 'CONSTANT', {value : 32, writable : false}); // 创建一个只读属性
obj.CONSTANT = 16; // 对属性的修改是无效的,但是不会抛出错误


Object.defineProperties:该函数的作用类似于 Object.defineProperty,只不过该函数支持同时定义多个属性。
例如:
Object.defineProperties(obj, {a : {}, b : {}});定义两个新的属性 a 和 b。

Object.keys:调用该函数可以得到一个包含 Object 类型对象中所有可被枚举的属性的名称的数组。这个数组中包含的属性与使用 for-in 循环所能访问到的属性是相同的。

Object.create:该函数用来创建一个新的对象。新创建对象的内部属性Prototype的值由调用时的参数指定。在调用时还可以传入一个包含要定义的属性的对象。这个参数对象会被传递给 Object.defineProperties 函数来在新创建的对象中定义属性。通过 Object.create 可以很容易地实现基于原型的继承;
例如:
var Parent = {
    getName: function() {
        return this.name;
    }
}
 
var child = Object.create(Parent, {
    name: { value: "Benjamin"},
    url : { value: "http://www.zuojj.com"}
});
console.log(child.getName()); //Benjamin


Extensible的作用是否允许在对象中动态添加新的property。
Object.preventExtensions 和 Object.isExtensible:这两个函数用来设置和获取 Object 类型对象的内部属性 Extensible 的值。调用函数 Object.preventExtensions 之后会把内部属性 Extensible 的值设为 false。一旦设为 false 之后,就无法在代码中重新设置回 true。

Object.seal 和 Object.isSealed:调用 Object.seal 函数会把内部属性 Extensible 的值设为 false,同时把对象所拥有的每个属性的特性 Configurable的值也设为 false。
例如:
 var obj = {val : 1};
 obj.newVal = "Hello";

 Object.seal(obj);
 Object.defineProperty(obj, 'anotherVal', {}); // 抛出 TypeError 错误

Object.freeze 和 Object.isFrozen:Object.freeze 函数除了会执行 Object.seal 函数中所做的处理之外,还会把对象所拥有的命名数据属性的特性 Writable的值设为 false。

Object.preventExtensions、Object.seal 和 Object.freeze 函数可以用来保护对象,防止被第三方有意或无意的修改。

分享到:
评论

相关推荐

    proposal-object-rest-spread, ECMAScript的rest/扩展属性.zip

    proposal-object-rest-spread, ECMAScript的rest/扩展属性 对象的对象 rest/扩展属性ECMAScript 6为 array literals分配了 rest元素和扩展元素( 用于 array 文本。这个建议引入了类似的rest属性对象literals分配和...

    JavaScript权威指南-ECMAScript5.pdf

    12. **ECMAScript5**:ECMAScript是JavaScript的标准,第五版引入了严格模式、对象字面量的改进、JSON支持、函数绑定、数组和对象的新方法等特性。 13. **函数式编程**:虽然JavaScript并非纯函数式语言,但其支持...

    EcmaScript面向对象1

    这些特性可以通过Object对象的方法如`Object.getOwnPropertyDescriptor()`和`Object.defineProperty()`进行查询和设置。例如,只读属性、不可删除属性或不可配置的属性都有特定的限制。 在ECMAScript面向对象编程中...

    Object方法和属性1

    总结一下,`Object.create()`是ECMAScript 5提供的用于创建新对象并控制其原型的工具,而`hasOwnProperty()`和`propertyIsEnumerable()`则是帮助我们理解和操作对象属性的关键方法。这些特性增强了JavaScript的面向...

    ECMAScript-Edition5-小试

    - **属性描述符**:这是 ES5 中新增的重要概念之一,它允许开发者更细致地控制对象属性的行为。属性描述符分为两种类型:数据描述符和访问器描述符。数据描述符包括 `[[Value]]`、`[[Writable]]`、`[[Enumerable]]` ...

    Using the Excel Services ECMAScript Object Model.docx

    在本实践实验室中,你将学习如何利用Excel Services的ECMAScript对象模型来自动化和与Excel Web Access(EWA)web部件交互。这个对象模型提供了一种方法,允许开发者通过JavaScript或ECMAScript在浏览器环境中与托管...

    js对象属性排序

    5. **ES6新特性**:在ES6中,`Object.getOwnPropertyNames()`和`Reflect.ownKeys()`可以获取对象的所有属性,包括不可枚举的,然后进行排序。 需要注意的是,JavaScript引擎可能有不同的实现,导致在某些环境下,...

    ECMAScript 5中的属性描述符详解

    首先,`Object.defineProperty`是ECMAScript 5中用于定义或修改对象属性的方法。它的基本语法如下: ```javascript Object.defineProperty(obj, prop, descriptor) ``` - `obj`:要操作的对象。 - `prop`:要定义...

    浅析JavaScript中的对象类型Object

    理解:Object类型是所有它的实例的基础,换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。 Object的实例都具有以下属性和方法 1.Constructor:保存着用于创建当前对象的函数 2.hasOwnProperty...

    浅析JavaScript中的对象类型Object_.docx

    JavaScript中的对象类型Object是语言的核心组成部分,它不仅构成了所有复杂数据结构的基础,还扮演着全局对象的角色,提供了许多内置的方法和属性。在这个浅析中,我们将深入探讨Object类型及其相关特性。 首先,...

    ECMAScript5.1中文版说明

    - 对象的可枚举属性和不可枚举属性:`enumerable`属性控制属性是否能被`for...in`循环遍历。 - `Object.keys()`返回一个数组,包含对象的所有可枚举属性的名称。 - `Function.prototype.bind()`方法,创建一个新...

    ECMAScript® 2016 7th Language Specification.pdf

    ECMAScript 2016 作为第七版语言规范,在原有基础上增加了新的特性,如 `Array.prototype.includes()`、指数操作符、`Object.values()` 和 `Object.entries()` 等,这些改进不仅提升了语言的功能性,也为开发者带来...

    ECMAScript 2018快速入门

    7. **Object.values()和Object.entries()** 对象的`.values()`方法返回一个迭代器,生成对象的所有可枚举属性的值。`.entries()`则返回一个迭代器,生成对象的键值对数组,这对遍历和操作对象非常有用。 8. **对尾...

    ECMAScript

    ECMAScript是现代Web开发的基础之一,掌握了其核心概念如对象类型、基本包装类型、Global对象以及Math对象,能够帮助开发者更好地理解和运用JavaScript语言。在实际开发过程中,合理利用这些特性可以极大地提高代码...

    besen-master_delphi_inchknf_ECMAScript_

    另外,`Object.defineProperty()`可以精确控制对象属性的访问和修改,包括数据属性和访问器属性。 再者,ES5提供了数组的新方法,如`forEach()`, `map()`, `filter()`, `reduce()`等,这些方法极大地提高了处理数组...

    详解ECMAScript2019/ES10新属性

    总结,ECMAScript 2019/ES10的新属性增强了数组处理和对象创建的能力,使得JavaScript的代码更加简洁和高效。`Array.prototype.flat()`和`Array.prototype.flatMap()`提供了处理多维数组的新途径,而`Object....

    Javascript Object 对象学习笔记

    文档中提到了Object对象的几个重要属性和方法: - constructor:它是一个对创建该对象的构造函数的引用。 - hasOwnProperty():这是一个用来检查对象是否含有特定的、非继承的属性的方法。在例子中,我们看到如何...

    es5:ecmascript 5 中文版 + es合集

    JSON(JavaScript Object Notation)在ES5中被正式引入,提供`JSON.parse()`和`JSON.stringify()`方法,用于转换JavaScript对象和字符串。 ### 6. **严格模式** `"use strict"`指令在ES5中引入,启用严格模式,这将...

    《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型

    String对象继承了Object类的所有属性和方法,并且还提供了自己的valueOf()方法和toString()方法。这两个方法都会返回字符串的原始值。String类提供了一些用于处理字符串的方法,例如通过length属性获取字符串长度,...

    ECMAScript5.1规范中文版

    - **特性(Attribute)**:描述对象属性的特性。 - **自身属性(Own Property)**:直接属于一个对象的属性。 - **继承属性(Inherited Property)**:对象通过其原型链继承的属性。 #### 三、记法与约定 ...

Global site tag (gtag.js) - Google Analytics