您的位置:首页 > Web前端 > JavaScript

【js学习笔记-036】--属性的特性

2013-07-23 16:23 302 查看
数据属性的4个特性:值,可写性,可枚举性,和可配置性

存取器的4个特性:读取,写入,可枚举和可配置性。

为了实现属性特性的查询和设置操作,ECMAScript 5 定义了一个名为”属性描述符”的对象,这个对象代表4个特性。描述符对象和它所描述的属性特性同名,因此,数据属性的描述符对象的属性有value,writable,enumerable和configurable.

存取器属性的描述符对象则用get属性和set属性代替value,writable。writable,enumberable和configurable是布尔值。当然get属性和set 属性是函数值

通过Object.getOwnPropertyDescriptor()只能得到自有属性的描述符。要想获取继承属性的特性,需要遍历原型链getPrototypeOf(),要想设置属性的特性,或者想新建属性具有某种特性,则需要调用Object.defineProperty();

var o = {}

Object.defineProperty(o,”x”,{

value:1,writable:true,

enumberable:true,

configurable:true

})

以上,属性存在但不可枚举。

o.x //=>1

Object.key(o)//=>[]

//现在对属性做修改,使其只读

Object.defineProperty(o,”x”,{writable:false});

//试图更改这个属性值

o.x = 2; //操作失败但不报错是,而在严格模式中会抛出类型错误异常

//属性依然可配置,因此可以通过这种方式对它进行修改

Object.defineProperty(o,”x”,{value:2});

//现在将x从数据属性改为存取器属性:

Object.defineProperty(o,”x”,{get:function{return0;}});

o.x ; //=>0

注意:要么修改已有属性,要么新建自有属性,但不能修改继承属性

要修改一个对象的多个属性可以使用Object.defineProperties(),每一个参数是要修改的对象,第二个一个映射表,它包含要新建或修改的属性名称,以及它们的属性描述符。

getter和setter的老式 API

在ECMAScript 5采纳之前,大多数javascript的实现(除IE),已经支持对象直接量语法中的get set。

__lookupGetter__()和__lookupSetter__()用以返回一个命名属性的getter和setter方法。

__defineGetter__()和__defineSetter__()用以定义getter和setter方法。第一个参数是属性名,第二个参数是getter 和setter方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: