Object.defineProperty 详解

最近想了解一下Vue是怎么实现数据双向绑定的,了解到是基于Object.definProperty,在此记录一下。

Object.defineProperty  顾名思义,就是给对象定义一个属性,总共有这么几种:

  • value  属性的值
  • writable  是否可改写,如果为false,就为只读,不能重新赋值,和const差不多
  • enumerable  能否枚举,如果设置为false则不能在for……in中出现  
  • configurable   ’配置‘,顾名思义,一旦为false,就不能再设置他的(value,writable,configurable)
  • 不能同时设置访问器 (get 和 set) 和 wriable 或 value,否则会错,就是说(get 和 set)和(wriable 或 value中的任何一个)只能取其一

  • get  读取时调用这个方法
  • set  赋值时调用这个方法

 随便写点东西

<script>
    var c = {
        year:2017
    };
    Object.defineProperty(c,'a',{
     // 注意这里不能直接不能对a直接赋值,否则会无限回调 set:
function(val){console.log(`I set the value ${val}`);}, get:function(){return this} }) </script>

 分别赋值和取值:

 

set的时候正确的调用了方法,但是取值的时候如果写return this.a

就会报错,栈溢出。看上面的图我们就明白了,a的值指向自身,如果直接打印就会无限回调,虽然我们不能取到a,但我们能通过a取到其他属性

修改get:

set:function(val){
	this.year = val
},
get:function(e){
	return this.year
}

  

 

转载于:https://www.cnblogs.com/lastnigtic/p/6800330.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值