说明:本文参考阮一峰的ECMAScript 6 入门
super关键字
我们知道,this关键字总是指向函数所在的当前对象。ES6又新增了一个super关键字,指向当前对象的原型对象。
const proto= {
foo: 'hello'
}
const obj = {
foo: 'world',
//ES6方法的简写形式
find(){
return super.foo
}
}
Object.setPrototypeOf(obj, proto)
obj.find() //hello
上面代码中,对象obj的find()方法中,使用super返回了原型对象proto的foo属性。
注意,super关键字表示原型对象时,只能在对象的方法中使用,用在其他地方都会报错。
//报错SyntaxError: 'super' keyword unexpected here
const p = {
foo: super.foo
}
//报错SyntaxError: 'super' keyword unexpected here
const obj = {
foo: () => super.foo
}
//报错SyntaxError: 'super' keyword unexpected here
const obj = {
foo: function () {
return super.foo
}
}
上面三种super的用法都会报错,因为对于 JavaScript 引擎来说,这里的super都没有用在对象的方法之中。例一是在对象中,而例二例三报错,是因为目前,只有对象方法的简写法可以让 JavaScript 引擎确认,定义的是对象的方法。