Open AwakenedSomeone opened 3 years ago
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了。
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()。
上述代码中x和y的解构有些不同,如果什么都不传,则结果是一样的,但当传入一个空对象的时候,x和y的表现则不一样了。 因为当第二个参数传入空对象时,{y: 10}则被替换为了{},此时通过{}解构到y,则是undefined了。
var o1 = { ['f' + 'oo']() {}, *['b' + 'ar']() {} }
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