ES6中的super关键字

13 篇文章 2 订阅
12 篇文章 3 订阅

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




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值