美文网首页
Object.defineProperty() 和 Object

Object.defineProperty() 和 Object

作者: Cherry丶小丸子 | 来源:发表于2022-04-27 12:22 被阅读0次
Object.defineProperty()

该方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象

语法:Object.defineProperty(obj, prop, descriptor)
  • 参数 obj:要定义属性的对象
  • 参数 prop:要定义或修改的属性的名称
  • 参数 descriptor:要定义或修改的属性描述符
描述符:
  • configurable:可配置性,表示能否修改属性的特性( 比如 delete obj.key )。默认值为 true
  • enumerable:可枚举性,表示能否通过 for in 循环访问属性,默认值为 true
  • writable:可读写性:表示能否修改属性的值。默认值为 true
  • value:包含这个属性的数据值。默认值为 undefined
  • get:属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数
  • set:属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数
var obj = {
    key: 1,
    number: 2
};

Object.defineProperty(obj, "key", {
    configurable: true,
    enumerable: true,
    writable: true,
    value: 1,
    get(){
        return this.key
    },
    set(newKey){
        if(newKey > 1993){
            this.key = newKey;
            this.number++
        }
    }
});
Object.defineProperties()
// 定义多个属性
let student = {};
Object.defineProperties(student, {
    name:{
        configurable: true,
        enumerable: true,
        writable: true,
        value: '张三'
    },
    age: {
        writable: true,
        value: 16
    },
    sex: {
        get(){
            return '男';
        },
        set(v){
            p1.sex = v;
        }
    }
})

p1.sex = "男";
console.log(student.name + ":" + student.age); // 张三:16
console.log(p1.sex); // 男
student.sex = "女";
console.log(student.sex); //男
console.log(p1.sex); // 女
Object.getOwnPropertyDescriptor()

该方法返回指定对象上一个自有属性对应的属性描述符

let person = {
    name: '张三',
    age: 18
}

let desc = Object.getOwnPropertyDescriptor(person, 'name'); 
console.log(desc)  结果如下
// {
//     configurable: true,
//     enumerable: true,
//     writable: true,
//     value: "张三"
// }
Object. getOwnPropertyDescriptors()

所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象

let person = {
    name: '张三',
    age: 18
}
let desc = Object.getOwnPropertyDescriptors(person, 'name');
console.log(desc) 
//{
//    configurable: true,
//    enumerable: true,
//    value: '张三',
//    writable: true
//}

相关文章

网友评论

      本文标题:Object.defineProperty() 和 Object

      本文链接:https://www.haomeiwen.com/subject/hgnkyrtx.html