vue 源码学习一: 了解Object.defineProperty

本文详细介绍了ECMAScript5.1中的Object.defineProperty方法,解释了如何使用该方法来监听对象属性的变化,并通过一个简单的示例展示了其实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Object.defineProperty是 ECMAScript5.1中定义的参数。旨在监听一个对象改变时的值。

Object.defineProperty(obj, prop, descriptor)

obj: 监听对象

prop: 监听对象的属性

descriptor: {
    configurable: false ,  
    enumerable: false,
    writable: false,
    value: null ,
    set: Function, // 带改变值 若没有为undefined
    get: Function //若没有为undefined

}
  • configurable属性是否可配置,可配置的含义包括(是否可以删除属性),是否可以修改属性writable 、 enumerable 、 

  • enumerable, 属性是否可以枚举,可枚举的含义 : 是否可以通过for ... in 遍历到,是否可以通过Object.keys()方法获取属性名称。

  • writable,属性是否可以重写,是否可以对属性重新赋值。

  • value, 属性的默认值

  • set, 属性的 重写方法, 一旦属性被改变,此方法自动调用

  • get, 属性的 读取方法, 一旦属性被访问读取,此方法自动被调用

简单示例

html代码

  <div>
        <input type='text' placeholder="请输入用户名" onInput="textChange(event)" />
        输入结果:
        <p id="result"></p>   
    </div> 

js 代码

        let res = {
            value: ''
        };
        let result = {
            value: ''
        };
        function textChange( e ){
            res.value = e.target.value;
            document.querySelector('#result').innerHTML = result.value;// 触发的是 get这个函数
        }
        Object.defineProperty(res,'value', {
            get: ( ) => {
                return result.value;
            },
            set:( val ) => {
                result.value = val;
            }
        });

这样就基本上了解了这个函数了。若有什么错误的地方,还望指出。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值