理解Object.defineProperty()

332 阅读1分钟

最近在看一本书叫你不知道JavaScript,看到了object.defineProperty,然后仔细一想发现我只知道vue是用这个来进行数据劫持,但不知道他是怎么运行,有几个参数,由此,来做一个笔记

1.用法

话不多说,直接上代码

var myObject = 0;

0b ject.defineProperty(myObject,"a",{
    value: 2,
    writable: true,
    configurable: true,
    enumerable: true
    });
    
myObject.a;// 2

如图所示,接收三个参数,第一个是所绑定的对象,第二个参数是所绑定对象的属性,如果没有该属性,则添加这个属性,如果有这个属性则绑定这个属性

其中

var myObject = {};

0bject.defineProperty(myObject,"a",{
    value: 2,
    writable: false,// 不可写!
    configurable: true,
    enumerable: true
    });
    
my0bject.a = 3;
myObject.a;// 2

writable决定是否可以修改属性的值。 如果在严格模式下,false还修改值的话则会报错。

var myObject = {
    a:2
};

myObject.a = 3;
my0bject.a;  // 3

0bject.defineProperty(myObject,"a",{
    value: 4,
    writable: true,
    configurable: false//不可配置!
    enumerable: true
    });
    
my0bject.a;// 4
my0bject.a = 5;
myObject.a;// 5
0bject.defineProperty (myObject,"a",{
value: 6,
writable: true,configurable: true,enumerable: true} );
// TypeError

最后一个defineProperty(..)会产生一个TypeError错误,不管是不是处于严格模式,尝试修改一个不可配置的属性描述符都会出错。注意:如你所见,把configurable修改成false是单向操作,无法撤销!

Enumerable 枚举属性,如果设置成false的话就for in循环遍历不到设置为false的属性,如果是true的话就能遍历到,简单来说就是一个枚举属性 简单介绍这么多 主要今天也面试了,没有学习到多少知识 哈哈 ,最近也在准备面试,为面试而努力 加油吧好兄弟们