赞
踩
语法:
作用:除了可以用构造函数和字面量的方式为对象设置属性,也可以使用 object.defineProperties来添加/设置对象属性。
参数:
object
必需。 对其添加或修改属性的对象。 这可以是本机 JavaScript 对象或 DOM 对象。
descriptors
必需。 包含一个或多个描述符对象的 JavaScript 对象。 每个描述符对象描述一个数据属性或访问器属性(意思就是对象具有数据属性或者访问器属性)。 详见:数据属性和访问器属性
数据属性
数据属性 是可获取和设置值的属性。数据属性将 value 和 writable 属性包含在其描述符中。
下表列出了数据属性描述符的特性。
如果描述符没有 value、writable、get 或 set 特性且指定的属性名不存在,则会添加数据属性。
在 configurable 特性为 false 且 writable 为 true 时,可以更改 value 和 writable 特性。
在未使用 defineProperty 的情况下添加的数据属性
如果您在未使用 Object.defineProperty、Object.defineProperties 或 Object.create 函数的情况下添加数据属性,则 writable、enumerable 和 configurable 特性都将设置为 true。在添加属性后,可以使用Object.defineProperty 函数修改属性。
访问器属性
只要设置或检索属性值,访问器属性 就会调用用户提供的函数。访问器属性的描述符包含 get 特性和/或 set 属性。
下表列出了访问器属性描述符的特性。
在未定义 get 访问器时,如果尝试访问属性值,则将返回 undefined 值。在未定义 set 访问器时,如果尝试向访问器属性赋值,则什么也不会发生。
以下例子给ling 这个对象设置了 数据属性 name 和 访问器属性 setNameWarming
- var ling={};
-
- Object.defineProperties(ling,{
- name:{
- value:"zzling", //设置该属性的初始值
- writable:false, //设置可修改性
- enumerable:true, //设置可枚举性
- configurable:true, //设置可设置性
- },
-
- setNameWarming:{
- set:function(newVal){
- alert("警告:有人试图用setNameWarming 访问器属性设置name 的值为"+newVal);
- this.name=newVal
- },
-
- get:function(){
- return this.name
- },
- enumberable:true,
- configurable:true
- }}
- );
-
- ling.setNameWarming="lingggggg" //调用setName 访问器属性(函数),尝试把name 值改为"linggggg"
- document.write("ling.name的值:"+ling.name) //因为writable(是否可修改)特性为 false。所以name属性值无法修改,还是返回"ling"

例子解读:
ling.setNameWarming="lingggggg" //调用setName 访问器属性(函数),尝试把name 值改为"linggggg" document.write("ling.name的值:"+ling.name) //因为writable(是否可修改)特性为 false。所以name属性值无法修改,还是返回"ling"1. 调用 setName 访问器属性(函数)设置name 的值为 "linggggg"
2. 最后返回的 ling.name 的值依旧是"ling", 没有变为"linggggg"
因为在 name 数据属性里,writable (可修改性)特性为 false。
这个方法除了可以设置对象的属性值(value)外,还可以用来设置属性的特性(writable、enumberable、configurable 可修改性、可枚举性(能否用 in 检测遍历对象的属性)、是否可修改和删除特性);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。