FE-DSHUI / DSHUI

前端王者小分队读书会
4 stars 1 forks source link

《你不知道的JavaScript(下卷)》-ES6语法:计算属性名、解构、super-2021-04-20 #74

Open AwakenedSomeone opened 3 years ago

AwakenedSomeone commented 3 years ago
  1. 在补习ES6语法的时候,仔细看了解构这一章,有一点印象比较深刻: 解构默认值和函数参数默认值之间的差别,举个栗子:
    function f6({ x = 10 } = {}, { y } = { y: 10 }) {
    console.log(x, y)
    }
    f6() // 10 10
    f6({}, {}) // 10 undefined

上述代码中x和y的解构有些不同,如果什么都不传,则结果是一样的,但当传入一个空对象的时候,x和y的表现则不一样了。 因为当第二个参数传入空对象时,{y: 10}则被替换为了{},此时通过{}解构到y,则是undefined了。

  1. 计算属性名, ES6对对象字面定义新增了一个语法,用来支持指定一个要计算的表达式,其结果作为属性名:
    
    var prefix = 'user_'
    var o = {
    baz: function () {},
    [prefix + 'foo']: function () {}
    }
最常见的用法就是搭配symbol使用,也可以用在简洁写法中:

var o1 = { ['f' + 'oo']() {}, *['b' + 'ar']() {} }

 3. super对象:
  通常把super看作只与类相关,但是super对于普通对象的简洁方法也同样有效,特性也基本相同:

var o1 = { foo () { console.log('o1: foo') } } var o1 = { foo () { super.foo() console.log('o2: foo') } } Object.setPrototypeOf(o2, o1) o2.foo() // o1:f00 // o2: foo


这里的super就是Object.getPrototypeOf(o2),则会找到o1,并调用到o1.foo()。