Object.defineProperty用法

Object.defineProperty() 定义新属性和修改原有的属性

Object.defineProperty( obj,prop,descriptor)

翻译:对象.定义属性(对象,属性名必须是字符写法,{ value:所有 })

创建一个对象:

var obj = {
        id:1,
        pname:'小米',
        price:1999
    } ;

以前的对象添加和修改属性方式:

obj.num = 1000;  //直接新添加属性
obj.price = 99;  //直接修改属性
console.log(obj);

现在新的写法 添加属性:

Object.defineProperty(obj,'num',{
        value:1000
    });
    console.log(obj);

现在新的写法 修改属性:

Object.defineProperty(obj,'price',{
        value:9.9
    });
    console.log(obj);

限定死一个值,不允许修改:   writable用法

Object.defineProperty(obj,'id',{
        //如果值是false 不允许修改属性值,是true就可以修改
        writable:true,
    });
    obj.id = 2,
    console.log(obj); 


//是turn 可改  false不可改

判断是否可以被枚举,遍历 writable:  true 可以允许遍历 ,false不允许

Object.defineProperty(obj, 'address', {
            value: '凡科优向公司',
            writable: false,
            // enumerable:如果值是false 则不允许遍历,默认值是false
            enumerable: false
        });

        console.log(obj);
        console.log(Object.keys(obj));

 判断是否可以被删除或者是是否可以再次修改特性ture\false   默认是false

    configurable:true 可以允许删除 ,false不允许

Object.defineProperty(obj, 'address', {
            value: '凡优向公司',
            writable: false,
            // enumerable:如果值是false 则不允许遍历,默认值是false
            enumerable: false,
            // configurable:如果值是false 则不允许删除这个属性,默认值是false
            configurable: false
        });

        console.log(obj);
        console.log(Object.keys(obj));
        delete obj.address;
        console.log(obj);

总结:例子中:如果是自己添加num,想可以获取属性forEash . key(obj) 中出现num,那么需要设置enumerable: true,才显示。

如果第一次已经设置我是为configurable: false,那后面在改成configurable: ture 会报错,告诉您不能重复修改特性。

 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值