犀牛——第6章对象 6.7属性的特性

来源:互联网 发布:mdf ldf 还原数据库 编辑:程序博客网 时间:2024/05/17 22:00

6.7 属性的特性

除了包含名字和值之外,属性还包含了一些标识它们可写、可枚举和可配置的特性。

数据属性的4个特性分别是它的值(value)、可写性(writable)、可枚举性(enumerable)和可配置性(configurable)。

存取器属性的4个特性是读取(get)、写入(set)、可枚举性和可配置性。


调用Object.getOwnPropertyDescriptor()可以获得某个对象特定属性的属性描述符:

//返回{value:1,writable:true,enumerable:true,configurable:true}

Object.getOwnPropertyDescriptor({x:1},"x");


要想设置属性的特性,或者想让新建的属性具有某种特性,则需要调用Object.definePeoperty(),传入要修改的对象、要创建或修改的属性的名称以及属性描述符对象:

var o = {};//创建一个空对象

//添加一个不可枚举的数据属性x,并赋值为1

Object.defineProperty(o,"x",{

                                              value:1,

                                              writable:true,

                                              enumerable:false,

                                              configurable:true});


如果要同时修改或创建多个属性,则需要使用Object.defineProperties().


*可写性控制着对值特性的修改。

*可配置性控制着对其他特性(包括属性是否可以删除)的修改


6.8 对象的三个属性

6.8.1 原型对象

对象的原型属性是用来继承属性的。检测一个对象是否是另一个对象的原型,请使用isPrototypeOf()方法。

6.8.2 类属性

对象的类属性是一个字符串,用以表示对象的类型信息。默认的toString()方法返回了如下这种格式的字符串:

[object class]

6.8.3 可扩展性

对象的可拓展性用以表示是否可以给对象添加新属性。

Object.esExtensible()判断对象是否是可扩展的。

Object.preventExtensions()将对象转为不可扩展的。

Object.seal()和Object.preventExtensions()封闭对象。Object.isSealed()来检测对象是否封闭。

6.9 序列化对象

对象序列化是指将对象的状态转换为字符串,也可将字符串还原为对象。

JSON.stringify()和JSON.parse()用来序列化和还原JavaScript对象。

JSON的全称是“JavaScript Object Notation”——JavaScript对象表示法,它的语法和JavaScript对象与数组直接量的语法非常相近:

o={x:1,y:{z:[false,null,""]}};   //定义一个测试对象

s=JSON.stringify(o);            //s是'{"x":1,"y":{"z":[false,null,""]}}'

p=JSON.parse(s);               //p是o的深拷贝

JSON的语法是JavaScript语法的子集,它并不能表示JavaScript里的所有值。


6.10 对象方法

6.10.1 toString()方法

6.10.2 toLocaleString() 方法

6.10.3 toJSON()方法

6.10.4 valueOf()方法







0 0
原创粉丝点击