博客列表 >对象与数组的解构赋值,访问器属性

对象与数组的解构赋值,访问器属性

Stonegarlic
Stonegarlic原创
2022年11月13日 18:21:47291浏览

1103 作业

解构赋值

  1. // ?解构赋值
  2. let arr = [10,200]
  3. let a = arr[0]
  4. let b = arr[1]
  5. console.log(a,b)
  6. console.log('------------')
  7. // * 一,解构语法,数组解构
  8. // ! 模板 = 集合 (数组,对象)
  9. let [uname,email] = ['张三','123456qq.com'];
  10. console.log(uname,email)
  11. // ! 更新 在[],{},()前面的分号不能省略
  12. ; [uname,email] = ['李四','56qq.com'];
  13. console.log(uname,email);
  14. console.log('------------');
  15. // ? 1.值的数量<变量数量,传递默认值解决
  16. [uname,email,gender='女'] = ['王五','aasasdqq.com'];
  17. console.log(uname,email,gender);
  18. console.log('------------');
  19. // ? 2.值的数量>变量数量,...rest解决
  20. [uname,...arr] = ['赵六','aasasdqq.com','男'];
  21. // ? 会压缩到数组里面
  22. console.log(uname,arr);
  23. // ? 展开数组打印
  24. console.log(uname,...arr);
  25. console.log('------------');
  26. // ? 应用场景:交换2个数
  27. let x = 10;
  28. let y = 20;
  29. console.log(`x = ${x} , y = ${y}`);
  30. [y , x] = [x , y]
  31. console.log(`x = ${x} , y = ${y}`)
  32. console.log('------------');
  33. // * 二,解构语法,对象解构
  34. // ? 变量名 === 属性名
  35. let {num , price} = {num:4 , price: 200}
  36. console.log(num , price);
  37. // ? 更新,{}不能出现在左边为左值,所以加上()转为表达式
  38. ({num , price} = {num:10 , price: 200})
  39. console.log(num , price);
  40. console.log('------------');
  41. // ? 命名冲突:别名,解决
  42. let {pnum , price:uniPrice} = {pnum:'手机' , price: 2000}
  43. // ? 访问别名
  44. console.log(pnum , uniPrice);
  45. console.log('------------');
  46. // ? 应用场景:克隆对象
  47. let lesson = { name: 'ES6', score: 88 }
  48. console.log(lesson)
  49. // 如果想创建二个不相关的对象,值又完全一样,只能克隆
  50. let { ...obj } = lesson
  51. console.log(obj)
  52. console.log(obj != lesson)
  53. console.log('-----------------')
  54. // ? 应用场景2 : 解构传参
  55. let show = function (user) {
  56. // user 是一个对象
  57. return `姓名:${user.uname} , 邮箱:${user.email}`
  58. }
  59. let user = { uname: '王五', email: 'dddfdfdf@qq.com' }
  60. console.log(show(user))
  61. // * 使用对象解构进行简化传参
  62. show = function ({ uname, email }) {
  63. // user 是一个对象
  64. return `姓名:${uname} , 邮箱:${email}`
  65. }
  66. user = { uname: '小米', email: '45678@qq.com' }
  67. console.log(show(user))

效果展示

访问器属性

  1. let course = {
  2. lesson: {
  3. name: 'ES6',
  4. score: 60,
  5. },
  6. // 读取接口
  7. getScore() {
  8. return {
  9. name: this.lesson.name,
  10. course: this.lesson.score,
  11. }
  12. },
  13. // 设置接口
  14. setScore(score) {
  15. if (score >= 0 && score <= 100) {
  16. this.lesson.score = score
  17. } else {
  18. console.log('成绩必须在1-100分之间')
  19. }
  20. },
  21. }
  22. console.log(course.lesson.score)
  23. console.log(course.getScore())
  24. course.setScore(50)
  25. console.log(course.getScore())
  26. console.log('-------------------')
  27. // ? 用户习惯
  28. // console.log(course.score);
  29. // course.score = 90
  30. // ? 使用"访问器属性" 就可以实现
  31. course = {
  32. lesson: {
  33. name: 'ES6',
  34. score: 60,
  35. },
  36. score: 99,
  37. // getScore ===> get score
  38. // 普通方法 ===> 访问器属性
  39. // 如果使用访问器属性, get必须要有, set 可选
  40. get score() {
  41. return {
  42. name: this.lesson.name,
  43. course: this.lesson.score,
  44. }
  45. },
  46. // 将一个方法,伪装成"属性"
  47. set score(score) {
  48. if (score >= 0 && score <= 100) {
  49. this.lesson.score = score
  50. } else {
  51. console.log('成绩必须在1-100分之间')
  52. }
  53. },
  54. }
  55. // 经过包装和伪造, 现在就可以像访问属性一个访问一个方法了
  56. // course.score === course.get score()
  57. console.log(course.score)
  58. course.score = 50
  59. console.log(course.score)
  60. // ! 访问器属性 > 同名属性

效果展示

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议