ES6中的super关键字

在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();
}





版权声明:本文为qs8lk88原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。