美文网首页
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