老师,这里不能理解

老师,这里不能理解

https://img1.sycdn.imooc.com//climg/61b54eb809c369bf03770124.jpg

对象属性的合并,不是后面的同名属性会覆盖前面的同名属性吗,不管用户有没有传参进来不都是options对象里的timeoutTime属性会覆盖外面的这个属性吗

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2021-12-12 10:36:28

同学你好,对于你的问题解答如下

1、对象属性合并时确实是后面的同名属性会覆盖前面的同名属性

2、不是的。options才表示用户传过来的参数代码中设置的timeoutTime:30000可以理解一个默认值当用户传递的options参数中有timeoutTime属性那么就会覆盖timeoutTime:30000如果用户传递的options参数中没有timeoutTime那么就会使用这个默认值。

祝学习愉快~

  • 提问者 dawn_eve #1
    <script>
            const DEFAULT = {
                timeoutTime: 0
            };
            const options = {...DEFAULT,...{}};
    
            const result = {timeoutTime:30000,...options};
            console.log(result.timeoutTime);
           
        </script>

    https://img1.sycdn.imooc.com//climg/61b56319095bc30c02500043.jpg

    可是老师,为什么这里输出的是options里面的默认值

    2021-12-12 10:50:06
  • 好帮手慕慕子 回复 提问者 dawn_eve #2

    同学你好,因为const options = {...DEFAULT,...{}}; 这句代码,将DEFAUTL和空对象合并到一起,此时options对象中存在timeoutTime属性 值为0,可以输出查看下,如下:

    https://img1.sycdn.imooc.com//climg/61b56809096ecc5018220542.jpg

    之后再执行const result = {timeoutTime:30000,...options};这句代码时,options中的同名属性timeoutTime会覆盖前面的,所以最终result对象中timeoutTime属性值为0

    祝学习愉快~

    2021-12-12 11:11:22
  • 提问者 dawn_eve 回复 好帮手慕慕子 #3

    https://img1.sycdn.imooc.com//climg/61b56ab909433e6005760211.jpg

    老师,我应该想明白了,我以为后面传入的options就是构造函数中的this.options。。。。。。其实{timeoutTime:3000 , ...options}整体就是用户传入的参数。。。。。。有点尴尬

    2021-12-12 11:35:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师