最近在看一本书叫你不知道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的话就能遍历到,简单来说就是一个枚举属性 简单介绍这么多 主要今天也面试了,没有学习到多少知识 哈哈 ,最近也在准备面试,为面试而努力 加油吧好兄弟们