这个解构赋值如果还不会,那你就退!退!退!

458 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

goout.gif

目录

今日题

  1. 题目
  2. 分析 昨日题
  3. 题目
  4. 答案
  5. 解析 结语

今日题

题目

var outer = {
    name: '鲨鱼辣椒',
    inner: {
        name: '蟑螂恶霸'
    }
}
var f = function ({name, inner}) {
    name = '蝎子莱莱'
    inner.name = '蜻蜓队长'
}
f(outer)
console.log(outer.name)
console.log(outer.inner.name)

分析

兄弟们早上好,今天来看看这道解构赋值配合函数形参的题。我们先注意一个点,const { property } = obj 时,property是通过const进行声明并赋值的,所以const具有的特点它都有。再说一下函数的传参,函数的传参是值传递,即实参(基础数据类型/引用数据类型)的值传递给形参,形参接收到的是值,形参除了解构赋值,还可以配合解构赋值的默认值、形参默认值、...来接收最后的形参参数等,在函数形参配合解构赋值时,我们要注意下解构赋值后的变量给到了谁,这个变量又对应着谁,只要这些搞明白了,如果再点个赞,那可真就“诚如是,则霸业可成,汉室可兴矣”。

昨日题

题目

var o1 = {
    info: 'content'
}
var o2 = {
    sex: '女',
    content: '退!退!退!'
}
console.log(o2[o1.info])
o1.__proto__ = o2
console.log(o1.content)

答案

'退!退!退!','退!退!退!'

解析

首先定义了两个对象o1、o2,o1中包含info属性,info属性的值为content,o2中包含sex和content属性。昨天在分析中已经讲了,对象的取值方式有两种,一种为.取值,一种为[]取值,本题两个取值方式都有涉及。先来看第一种,o2[o1.info],前面已经说到了o1中info的属性值为content,所以此处相当于o2['content'],转换成我们经常使用的形式就是o2.content,所以结果为'退!退!退!';再来看o1.__proto__ = o2,起因就是o1.__proto__擅自指向了o2,所以Object.prototype大哥直接冲出后问道o1:"为什么不指向Object.prototype了呀,是谁让你修改原型指针的!",但是这对o1有影响吗,答案是当然没有,只见o1一边铿锵有力地跺脚,一边用类似击剑的动作指着对方大喊魔法咒语:“退!退!退!”,我为什么不可以用这个委托模式来指向o2呢,这样我没有的方法还可以去找o2要啊!好吧,你强任你强,接下来我们来看o1.content,o1.content先在o1自身寻找,发现没有,于是顺着原型链寻找,即o1.__proto__,也就是o2,而o2身上是有content属性的,所以再次输出'退!退!退!',看到这里没有点赞的都给我“退 退 退”。

结语

此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。
创作不易,少年,就请留个赞再走吧!