Vue:Object.defineProperty()方法整理


前言

本文记录笔者对Vue中Object.defineProperty()方法的整理

一、方法介绍

我们都知道JS中能够创建一个对象,并给对象相应的属性值进行复制,而在Vue中,Object.defineProperty()方法能够起到给已创建对象进行属性对象赋值的作用。

例:JS中创建对象

var p1 ={
          
   
    name:"duixiang",
}

而在Object.defineProperty()当中,可以通过接收参数对象,对对象属性进行赋值。

方法具体接受三个参数

    属性所在的对象 属性的名字 一个描述符对象

描述符对象

描述符对象,这里可以理解为一个数据属性,常见如下:

    configurable 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认值为true。 enumerable:表示能否通过for in循环访问属性,默认值为true writable:表示能否修改属性的值。默认值为true。 value:包含这个属性的数据值。默认值为undefined。

相关使用案例

Object.defineProperty(p1,"age",{
          
   
    writable :false,
    value : 15,
})
console.log(p1.age); //15
p1.age = 20;
console.log(p1.age); //15

二、get()和set()方法

我们可以修改Object.defineProperty()方法的第三个参数,来设置相应属性的set()和get()方法,从而对对象的属性进行设置和获取; 在设置多种属性时,也可单独对某种属性设置set()和get()方法

1.修改第三个参数获取设置和返回相应属性的方法

var book = {
          
   
    _year : 2004,
    edition : 1
}

Object.defineProperty(book,"year",{
          
   
    get: function(){
          
   
        return this._year
    },
    set: function(newYear){
          
   
        if(newYear > 2004){
          
   
            this._year = newYear;
            this.edition += newYear - 2004
        }
    }
})

book.year = 2005;
console.log(book.edition); // 2
console.log(book._year); //2005

2.设置多个参数的属性及set()和get()方法

var student = {
          
   };
Object.defineProperties(student,{
          
   
    name:{
          
   
        writable:false,
        value:"lisi"
    },
    age : {
          
   
        writable:true,
        value : 16,
    },
    sex:{
          
   
        get(){
          
   
            return 男;
        },
        set(v){
          
   
            p1.sex = v
        }
    }
})

p1.sex = "男";
console.log(student.name + ":" + student.age);
console.log(p1.sex); // 男
student.sex = "女";
console.log(student.sex); //男
console.log(p1.sex); // 女

总结

关于Object.defineProperty就整理到这里啦。

经验分享 程序员 微信小程序 职场和发展