我们知道,this关键字总是指向函数所在的当前对象,ES6又新增了另一个类似的关键字super,指向当前对象的原型对象。
const proto = {
foo : "hello",
};
const obj = {
foo : "world",
find(){
console.log(this.foo);
},
finds(){
console.log(super.foo);
}
};
Object.setPrototypeOf(obj,proto);
obj.find(); //wprld
obj.finds(); //hello
注意:super关键字表示原型对象时,只能用在对象的简洁形式的方法之中,用在其他地方都会报错。
const obj = {
foo : super.foo,
}
console.log(obj.foo); //error
const obj = {
foo : function(){
return super.a;
},
}
console.log(obj.foo()) //error
JavaScript引擎内部,super.foo等同于Object.getPrototypeOf(this).foo(属性) 或Object.getPrototypeOf(this).foo.call(this)(方法)。
const proto = {
x : "hello",
foo (){
console.log(this.x);
},
};
const obj = {
x : "world",
foo(){
super.foo();
},
};
Object.setPrototypeOf(obj,proto);
obj.foo(); //world
上面代码中,super.foo指向原型对象proto的foo方法,但是绑定的this却还是当前对象boj,因此输出的就是world。