`
kstgjfk403
  • 浏览: 28780 次
  • 性别: 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中的对象类型Object

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

    ECMAScript 5中的属性描述符详解

    主要介绍了ECMAScript 5中的属性描述符详解,本文讲解了Object.defineProperty、数据描述符、存取描述符、获取属性描述符、对象控制等内容,需要的朋友可以参考下

    深入浅出ES6

    ECMAScript 是基于对象的:基本语言和宿主设施都由对象提供,ECMAScript 程序是一组可通信的对象。ECMAScript 对象 (objects) 是 属性 (properties) 的集合,每个属性有零个或多个 特性 (attributes),它确定怎样...

    JavaScript中的对象的extensible属性介绍

    ECMAScript 5标准中,所有的对象默认仍是extensible的,但可以通过设定来改变这一属性。 查询一个对象是否是extensible的,可以使用Object.isExtensible()语句: 代码如下: var o = {x:1}; console.log(Object.is...

    深入浅出JavaScript对象模型

    象(Object—Based)的语言,而不是传统的面向对象(Object— Oriented)的语言”。相信绝大多数人不会清楚这句话是什么意 思。我想我们可以把它简化一下:你可以把对象看做是存放 数据的大的数组,每个对象都有一个属于...

    3-JavaScript高级教程-面相对象程序设计.pptx

    而向对象(Object-Oriented, OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。前面提到过,ECMAScript中没有类的概念,因 此它的对象也与基于类的语言中的对象有所...

    javaScript核心原理

    当然,也有基本类型,但是必要时,也需要转换成object对象来用。 An object is a collection of properties and has a single prototype object. The prototype may be either an object or the null value.

...

    JavaScript中使用Object.create()创建对象介绍

    对于对象的创建,除了使用字面量和new操作符,在ECMAScript 5标准中,还可以使用Object.create()来进行。Object.create()函数接受2个对象作为参数:第一个对象是必需的,表示所创建对象的prototype;第二个对象是可...

    【JavaScript源代码】JavaScript中Object、map、weakmap的区别分析.docx

     ECMAScript 6以前,在JavaScript中实现“键/值”式存储可以使用Object来方便高效地完成,也就是使用对象属性作为键,再使用属性来引用值。但这种实现并非没有问题,为此TC39委员会专门为“键/值”存储定义了一个...

    JavaScript基础和实例代码

    7.6.2 Location对象属性与URL的对应 7.6.3 使用reload()方法重载页面 7.7 Frame对象 7.7.1 框架集文档中对象的结构 7.7.2 控制指定的框架 7.7.3 常见属性和方法汇总 7.7.4 Frameset对象 7.7.5 iframe元素对象 7.8 ...

    浅析JavaScript中两种类型的全局对象/函数

    第一种是ECMAScript Global Object,第二种是宿主环境(Host)下的全局对象/函数。 一、核心JavaScript内置对象,即ECMAScript实现提供的不依赖于宿主环境的对象 这些对象在程序执行之前就已经(实例化)存在了。...

    proposal-object-pick-or-omit:更方便地引入“ Object.prototype。{pick,omit}”。

    Object.{pick,pickBy} / Object.{omit,omitBy} ECMAScript关于Object.pick , Object.pickBy , Object.omit和Object.omitBy提案,规格和参考实现。 规范由起草。动机通过选择或忽略对象的属性来方便地操作对象,如...

    源文件程序天下JAVASCRIPT实例自学手册

    7.6.2 Location对象属性与URL的对应 7.6.3 使用reload()方法重载页面 7.7 Frame对象 7.7.1 框架集文档中对象的结构 7.7.2 控制指定的框架 7.7.3 常见属性和方法汇总 7.7.4 Frameset对象 7.7.5 iframe元素对象 7.8 ...

    JavaScript对象的property属性详解

    JavaScript中对象的property有三个属性:1.writable。该property是否可写。...而在ECMAScript 5标准中,可通过property的描述对象(property descriptor)来对这些属性进行配置和修改。 如果将property的值信息也作为pr

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

    Object类具有下列属性: Constructor:对创建对象的函数的引用(指针),对于Object类,该指针指向原始的Object()函数 Prototype:对该对象的对象原型的引用。 Object类还有几个方法: HasOwnProperty(property):...

    Javascript数组操作高级心得整理

     对象属性的使用 15  对象方法的使用 15 (2) 对象的定义与实例化 15 (3) 对象的作用域 16  JavaScript对象只有公用作用域 16  JavaScript对象没有静态作用域 16  关键字this 16 (4) 定义类或对象的方法 16...

    object-create-x:Sham for Object.create

    对象创建x Sham for Object.createmodule.exports boolean :eject_button: 此方法方法使用指定的原型对象和属性创建一个新对象。 类型:出口成员返回: boolean具有指定原型对象和属性的新对象。 抛出: TypeError...

    javascript对象的property和prototype是这样一种关系

    一种叫做Host Object,由运行环境提供例如document对象, Dom Node等 Native objects是一种松散的结构并且可以动态的增加属性(property),所有的属性都有一个名字和一个值,这个值可以是另一个对象的引用 或者...

Global site tag (gtag.js) - Google Analytics