Javascript:defineProperty

对象的属性可以按程序员的意愿配置。
set,get方法

var obj = { firstname:"John",lastname:"Smith",};

Object.defineProperty(obj, 'fullname', 
    {
        get : function() { return obj.firstname + " " + obj.lastname },
        set : function( name ){  
                  let arr=name.split(" ");
                  obj.firstname = arr[0];
                  obj.lastname = arr[1];
              }
    }
);

console.log(obj.fullname)
obj.fullname = "Michael Jordan"
console.log(obj.firstname, obj.lastname)

set,get机制是现代化的编程语言的重要机制。此技巧的好处是,不用修改陈旧的代码,就能让貌似直接读写属性的代码,变成间接的经过了set,get函数调用后而读写背后的属性。这实际上是两头占便宜了,一方面,我们不用书写像console.log(obj.getFirstname())这样繁琐的代码,另一方面还享受了getFistname()的服务。

只读属性

var obj = {};

Object.defineProperty(obj, "a",
{
    value: 40,
    writable: false,
});

obj.a=10; //error(strict模式下)或无实际赋值动作

不可枚举的属性
 

var obj = {};
obj.a=10;
obj.b=20;
obj.c=30;

Object.defineProperty(obj, "d",
{
    value: 40,
    enumerable: false
});

for (var tmp in obj)  //看不到d
    console.log(tmp,"  ", obj[tmp])   

不可配置的属性

var obj = {};

Object.defineProperty(obj, "d",
{
    value: 40,
    configurable: false
});

delete obj.d  //删除不掉

console.log(obj.d)  //打印40

配置的意思是,可以改变属性d的只读性,枚举性,set,get方法等。
一旦被设置成不可配置,是一件很好的事情,因为不变性是一个好的特性。
 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值