JavaScript配置对象属性

在JavaScript中,对象是通过属性描述(property descriptor)进行描述的,我们可以配置以下关键字。

1.configurable——如果设置为true,则可以修改或者删除属性。如果设置为false,则不允许修改。

2.enumerable——如果设置为true,则可在for-in循环对象属性使出现。

3.value——指定属性的值,默认为undefined。

4.writable——如果设置为true,则可通过赋值语句修改属性值。

5.get——定义getter函数,当访问属性时发生调用,不能与value与writable同时使用。

6.set——定义setter函数,当对属性赋值时调用,也不能与value与writable同时使用。

通过简单语句创建对象属性,例如:

ninjaTestInherit.name = "Yoshi"

该赋值语句创建的属性可以被修改或删除、可遍历、可写, NinjaTestInherit的name属性值被设置为Yoshi,get和set函数均为undefined。

如果想调整属性的配置信息,我们可以使用内置的Object.defineProprty方法,传入3个参数:属性所在的对象、属性名和属性描述对象。

console.log("-----------------------------配置属性----------------------");
//创建一个空对象;通过赋值语句添加对象属性
var ninjaProperty = {};
ninjaProperty.name = "HaHa";
ninjaProperty.weapon = "KKKOOO";

//使用内置的'Object.defineProperty'方法设置对象属性的配置信息
Object.defineProperty(ninjaProperty, "sneaky",{
  configurable: false,
  enumerable: false,
  value: true,
  writable:true
});

if ("sneaky" in ninjaProperty) {
  console.log("We can access the new property");
}

for (let prop in ninjaProperty) {
  console.log("prop:" + prop);
  if (prop !== undefined) {
    console.log("An enumerated property:" + prop);
  }
}

 

由上述代码可知:

首先创建一个空对象,再通过传统赋值语句添加两个属性:name与weapon。接着,使用内置Object.defineProperty方法定义属性sneaky,属性描述为不可配置、不可枚举、属性值为true。由于属性sneaky是可写的,所以可以被改变。

通过for (let prop in ninjaProperty) ,访问新创建的sneaky属性,通过for-in循环遍历所有可枚举的属性,虽然可以正常访问sneaky属性,但是在for-in循环中可遍历属性name与weapon,不可遍历新增的sneaky属性。

将配置项enumerable设置为false,则在for-in循环中无法遍历该属性。

 

参考《JavaScript忍者秘籍》

猜你喜欢

转载自blog.csdn.net/zhangying1994/article/details/84892743
今日推荐