在JavaScript中,this关键字总是指向函数所在的当前对象,ES6中增加了一个与this对应的super关键字,指向的是当前对象(this指向的对象)的原型对象。
const demo1 = {
prop1 : '属性1'
};
const demo2 = {
find(){
//返回demo2 的原型对象的foo属性
return super.foo
}
};
Object.setPrototypeOf(demo2,demo1);
obj.find() //"hello"
需要注意的是,当super关键字表示原型对象时,只能用在对象的方法中。而在这里JavaScript引擎有一个bug。只有用对象方法的简写写法时,引擎才能确认这个函数是对象的方法,其他写法应用super的时候都会报错。
const proto = {
title :'原型对象'
sayTitle(){
console.log(this.title);
}
};
const obj = {
title : '对象',
sayPrototypeTitle(){
super.sayTitle();
}
}
Object.setPrototypeOf(obj,proto);obj.sayPrototypeTitle();// 结果:// 原型对象
下面是几种会报错的写法:
//报错,因为super不能应用在方法之外。
const obj = {
protoTitle : super.foo
}
//因为此时JS引擎不能识别function是对象的方法,所以调用super会报错。
const obj = {
title : '对象',
sayPrototypeTitle : function(){
super.sayTitle();
}
}
//因为此时JS引擎不能识别“箭头函数”是对象的方法,所以调用super会报错。
const obj = {
title : '对象',
sayPrototypeTitle => super.sayTitle();
}