一、获取对象属性特征:
首先我们先定义一个对象作为演示。
let obj = {
name: "Joker",
age: 20,
gender: "Male"
}
1.通过Object.getOwnPropertyDescriptor(对象名,"对象属性名"),即可获取到对象的某个属性特征。
console.log(Object.getOwnPropertyDescriptor(obj, "name"));
console.log(Object.getOwnPropertyDescriptor(obj, "age"));
console.log(Object.getOwnPropertyDescriptor(obj, "gender"));
2.通过Object.getOwnPropertyDescriptors(对象名),即可获取到对象的所有属性特征。
console.log(Object.getOwnPropertyDescriptors(obj))
二、灵活控制对象属性的特征:
首先我们先定义一个对象作为演示。
let obj = {
name: "Joker",
age: 20,
gender: "Male"
};
1.新增对象属性:
Object.defineProperty(obj, "newName", {
value: 'newJoker', //属性值
writable: false //属性值是否可以被修改
enumerable: true //属性是否可以被遍历
configurable: true //属性是否可以被删除 || 属性也不可以被重新配置
});
console.log(obj)
当然我们这里也可以使用 Object.defineProperties(对象名,{}) 一次新增多个属性。效果跟新增单个属性是一样的。
Object.defineProperties(obj, {
newName: {
value: 'newJoker',
writable: false,
enumerable: true,
configurable: true
},
newAge: {
value: 30,
writable: false,
enumerable: true,
configurable: true
}
}
);
console.log(obj)
3.Object.preventExtensions(对象名):保护我们的指定对象,不能往对象中添加属性。
let obj = {
name: "Joker",
age: 20,
gender: "Male"
};
Object.preventExtensions(obj);
obj.newName = "newJoker";
console.log(obj)
因此这里我们给对象新增了一个属性,是没有效果的。
4. 封闭对象API。是指将我们指定的对象封闭起来,不能往对象中添加属性、不能删除对象,且不能修改对象的特征
let obj = {
name: "Joker",
age: 20,
gender: "Male"
};
Object.seal(obj);
console.log(Object.isSealed(obj)); //true 查看该对象是否处于封闭状态
5.冻结对象API。冻结比封闭对对象属性控制更严格,冻结后只能读取数据,不能做一切的拓展。
let obj = {
name: "Joker",
age: 20,
gender: "Male"
};
Object.freeze(obj);
console.log(Object.isFrozen(obj)); //true 查看该对象是否处于冻结状态