js defineProperty,对象定义属性

对象是由多个名/值对组成的无序的集合

var obj = {

test: 'hello'

};

1.对象的已有的属性添加特性描述

Object.defineProperty(obj,'test',{

//是否可以删除(是否可以delete删除)目标属性或是否可以再次修改属性的特性

//(writable,configurable,enumerable)。ture可以,默认false

configurable:true|false,

// 此属性是否可以被枚举(for in 或Object.keys());ture可以默认false

enumerable:true|false,

value: '任意类型的值',

writable:true|false //属性的值是否可以被重写,true可以,默认false

});

2.对象新添加的属性的特性描述

Object.defineProperty(obj,'test',{

//是否可以删除(是否可以delete删除)目标属性或是否可以再次修改属性的特性

//(writable,configurable,enumerable)。ture可以,默认false

configurable:true|false,

// 此属性是否可以被枚举(for in 或Object.keys());ture可以默认false

enumerable:true|false,

value: '任意类型的值',

writable:true|false //属性的值是否可以被重写,true可以,默认false

});

 

存取器描述

var obj = {};

Object.defineProperty(obj,"newKey",{

get:function (){} | undefined,

set:function (value){} | undefined

configurable: true | false

enumerable: true | false

});

注意:当使用了getter或setter方法,不允许使用writable和value这两个属性

var obj = {};

var initValue = 'hello';

Object.defineProperty(obj,"newKey",{

get:function (){

//当获取值的时候触发的函数

return initValue;

},

set:function (value){

//当设置值的时候触发的函数,设置的新值通过参数value拿到

initValue = value;

}

});

//获取值

console.log( obj.newKey ); //hello

//设置值

obj.newKey = 'change value';

console.log( obj.newKey ); //change value

 

兼容性

在ie8下只能在DOM对象上使用,尝试在原生的对象使用 Object.defineProperty()会报错。这也是vue不支持ie8以下的原因

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值