Vue:Object.defineProperty()方法整理

  • Post author:
  • Post category:vue





前言

本文记录笔者对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就整理到这里啦。



版权声明:本文为qjyws原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。