Object.defineProperty
定义物件属性,调整属性特徵(请牢记!!)
// 定义物件属性,调整属性特徵Object.defineProperty
那特徵有哪些呢??
值(value)可否写入(writable)可否被删除(configurable)可否被列举(enumerable)改值
var family = { a: 1, b: 2, c: 3,}console.log(family); // 1 2 3// Object.defineProperty(物件,属性,参数) Object.defineProperty(family,'a',{ // 预设都为 true value: 4, writable : true, configurable : true, enumerable : true,})console.log(family); // 4 2 3
可否写入
var family = { a: 1, b: 2, c: 3,}console.log(family); // 1 2 3Object.defineProperty(family,'a',{ writable : false, // 不可写入 configurable : true, enumerable : true,})family.a = 10; // 静默错误 console.log(family); // 因不可写入 所以一样为 1 2 3
可否被删除
var family = { a: 1, b: 2, c: 3,}console.log(family); // { a : 1 , b : 2 , c : 3}Object.defineProperty(family,'b',{ configurable : false, // 不可删除})delete family.a;console.log(family); // { b : 2 , c : 3}delete family.b;console.log(family); // { b : 2 , c : 3}
可否被列举
var family = { a: 1, b: 2, c: 3,}Object.defineProperty(family,'c',{ enumerable : false, })for(var key in family){ console.log('列举'+key); // 列举 a 列举 b}
浅层保护
Object.defineProperty 只能做到浅层保护
var family = { a: 1, b: 2, c: 3,}Object.defineProperty(family,'d',{ value: {}, writable : false, })family.d = 1; console.log(family); // {} , d 一样为空物件 // 但禁止写入只限制 d 此属性// 由于物件有传参考的特性 所以我们可以针对里面的值来做设定
var family = { a: 1, b: 2, c: 3,}Object.defineProperty(family,'d',{ value: {}, writable : false, })family.d = 1; console.log(family); // {} , d 一样为空物件 // 但禁止写入只限制 d 此属性// 由于物件有传参考的特性 所以我们可以针对里面的值来做设定family.d.a = 10;console.log(family); // d: { a : 10}
一次定义大量属性
var family = { a: 1, b: 2, c: 3,}Object.defineProperties(family,{ a:{ writable: false, }, b:{ configurable: false, }, c:{ enumerable: false, }})
那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷