属性标志:
介绍:
对象属性,除
value
外,还有三个特殊的特性,也就是所谓的“标志”:
属性 true false writable
值可以被修改 只可读的 enumerable
被在循环中列出 不会被列出 configurable
此属性可以被删除/修改 不可以
查询有关属性的完整信息:
let descriptor = Object.getOwnPropertyDescriptor(对象名称, 对应查看的属性名称);
修改标志:
介绍:
使用
defineProperty
时候,如果该属性存在,defineProperty
会更新其标志。否则,它会使用给定的值和标志创建属性;在这种情况下,如果没有提供标志,则会假定它是false
。语法:
Object.defineProperty(对象名称, 所需要修改的属性名, 修改后的属性名);
举例:
只读:
"use strict"; let user = { name: "A" }; Object.defineProperty(user, "name", { writable: false }); user.name = "B";//尝试改变
不可枚举:
let user = { name: "A", B() { return this.name; } }; Object.defineProperty(user, "B", { enumerable: false }); for (let key in user) console.log(key);
不可配置:
let user = { name: "John" }; Object.defineProperty(user, "name", { configurable: false }); console.log(user.name); user.name = "Pete"; console.log(user.name); delete user.name;
同时对多个进行设置:
Object.defineProperties(对象名, { 属性名1: { 属性设置1,属性设置2... }, 属性名1: { 属性设置1,属性设置2... }, // ... });
要一次获取所有属性描述符:
Object.defineProperties(对象名)