枚举也就是列举,js中对象属性可以设置是否枚举。不可枚举也就无法列举,无法for…in遍历。
//对象属性可设置枚举与不可枚举 不可枚举指的是属性无法列出来也就是
//无法通过for in 访问 且这个属性为灰色
function Person() {
this.name = "小明"
}
//直接定义属性值 Person.prototype.job = "学生";
//通过 Object.defineProperty 定义属性值与枚举
Object.defineProperty(Person.prototype, "job", {
value: "学生",
enumerable: true,
//enumerable默认为false
})
var student = new Person();
Object.defineProperty(student, "sex", {
value: "male",
writable: false
//enumerable默认为false
});
for (let key in student) {
console.log("遍历的student." + key + " = " + student[key]);
//遍历访问不到student.sex
}
console.log("直接输出的student.sex" + " = " + student.sex);
// 能直接访问student.sex
Object.getOwnPropertyDescriptor(student, 'sex');//查看属性描述
Object.getOwnPropertyDescriptors(student);//查看属性描述--总