js中的Object
浅克隆
var obj = { ???a: 1, ???b: 2, ???c: 3}方式一: ???var o = Object.assign({}, obj);方式二: ???var {...o} = obj;
深克隆
JSON.parse(JSON.stringify(obj))
freeze
浅冻结,属性值不能修改,但是嵌套的引用类型不起作用 ???Object.freeze(obj); ???obj.a = 11 // 修改属性无效
seal
密封对象,不能添加和删除属性 ???Object.seal(obj); ???obj.d = 33; // 添加新属性无效
只读属性
var obj = { ???a: 1, ???b: 2}Object.defineProperty(obj, "c", {value: 3, writable: false});obj.c = 4; // 无效console.log(obj.c);
不可枚举属性
var obj = { ???a: 1, ???b: 2}Object.defineProperty(obj, "c", {value: 3, enumerable: false});for(let item in obj) { ???console.log(obj[item]); // 1 2}
不可重新配置属性
var obj = { ???a: 1, ???b: 2}Object.defineProperty(obj, "c", {value: 3, enumerable: false, configurable: false});Object.defineProperty(obj, "c", {value: 3, enumerable: true}); // 报错
读取属性的配置信息
var obj = { ???a: 1, ???b: 2}Object.defineProperty(obj, "c", {value: 3, enumerable: false, configurable: false});console.log(Object.getOwnPropertyDescriptor(obj, "c")); 输出信息 ???{ ????????value: 3, ???????writable: false, ???????enumerable: false, ???????configurable: false ????}
get和set
var obj = { ???a: 1, ???b: 2}Object.defineProperty(obj, "bb", { ???get: function() { ???????console.log("取值"); ???????return this.b; ???}, ???set: function(value) { ???????console.log("赋值", value); ???????this.b=value; ???}});obj.bb=1; ?// 赋值 1console.log(obj.bb);
js中的Object
原文地址:https://www.cnblogs.com/ye-hcj/p/10349215.html