super 对象

通常把 super 看作只与类相关。但是,鉴于 JavaScript 的原型类而非类对象的本质,super对于普通(plain)对象的简洁方法也一样有效,特性也基本相同。看代码:

var o1 = { 
 foo() { 
 console.log( "o1:foo" ); 
 } 
}; 
var o2 = { 
 foo() { 
 super.foo(); 
 console.log( "o2:foo" ); 
 } 
}; 
Object.setPrototypeOf( o2, o1 ); 
o2.foo(); // o1:foo 
 // o2:foo

注:foo(){..}是ES6新增语法,相当于 function foo(){...},但是只有foo(){...}才可以调用super();这种方式又叫 简洁方法,super 只允许在简洁方法中出现,而不允许在普通函数表达式属性中出现。也只允许以 super.XXX 的形式(用于属性 / 方法访问)出现,而不能以super() 的形式出现。

o2.foo() 方法中的 super 引用静态锁定到 o2,具体说是锁定到 o2 的 [[Prototype]]。基本上这里的 super 就是 Object.getPrototypeOf(o2)——当然会决议到 o1——这是它如何找到并调用 o1.foo() 的过程。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值