文章归档于:https://www.yuque.com/u27599042/front-end
Object.defineProperty(obj, prop, descriptor)
<script>
let person = {
name: 'zs',
sex: 'male'
}
// 向 person 对象中新添加一个 age 属性
// 同时指定新添加的属性值为 18
Object.defineProperty(person, 'age', {
value: 18
})
console.log(person)
script>
<script>
let person = {
name: 'zs',
sex: 'male'
}
// 向person对象中新添加一个age属性
Object.defineProperty(person, 'age', {
value: 18
})
console.log(person)
console.log(Object.keys(person))
for (let key in person) {
console.log(key, person[key])
}
script>
<script>
let person = {
name: 'zs',
sex: 'male'
}
// 向person对象中新添加一个age属性
Object.defineProperty(person, 'age', {
value: 18,
// enumerable 控制属性是否可以枚举,
// 默认值为 false
enumerable: true
})
console.log(person)
console.log(Object.keys(person))
for (let key in person) {
console.log(key, person[key])
}
script>
<script>
let person = {
name: 'zs',
sex: 'male'
}
Object.defineProperty(person, 'age', {
value: 18,
enumerable: true,
// 控制属性值是否可以被修改,
// 默认值为 false
writable: true
})
script>
<script>
let person = {
name: 'zs',
sex: 'male'
}
Object.defineProperty(person, 'age', {
value: 18,
enumerable: true,
writable: true,
// 控制属性是否可以被删除,
// 默认值为 false
configurable: true
})
script>
<script>
let person = {
name: 'zs',
sex: 'male'
}
Object.defineProperty(person, 'age', {
// 当读取person的age属性的时候,
// get函数(getter)会被调用,
// 且函数返回值就是属性age的值
// get: function() {
// console.log('读取age属性')
// return number
// }
// 简写
get() {
console.log('读取age属性')
console.log(this)
return 'hello'
}
})
script>
<script>
let person = {
name: 'zs',
sex: 'male'
}
Object.defineProperty(person, 'age', {
get() {
console.log('读取age属性')
console.log(this);
return 'hello'
},
// 修改person的age属性的时候,
// set函数(setter)会被调用,
// 且会收到修改的具体值
set(value) {
console.log('修改了age的属性值:', value)
console.log(this);
}
})
script>
<script>
let person = {
name: 'zs',
sex: 'male'
}
Object.defineProperty(person, 'age', {
value: 12,
get() {
console.log('读取age属性')
console.log(this);
return 'hello'
},
set(value) {
console.log('修改了age的属性值:', value)
console.log(this);
}
})
script>
Object.defineProperties(obj, props)
const obj = {};
Object.defineProperties(obj, {
property1: {
value: true,
writable: true,
},
property2: {
value: "Hello",
writable: false,
},
// 等等……
});