[英]Not able to use 'super' with function defined on protoype object in JavaScript class
我有A
班,是B
班A
父母
class A {
constructor(a){
this.a=a;
}
par(){
console.log("para");
}
}
class B extends A {
constructor(a) {
super(a)
this.a = "child";
}
par() {
super.par();
console.log("child");
}
}
当我使用此代码时,它可以正常工作。
但是,当我使用以下代码在B
上显式定义par
函数时:
B.prototype.par = function() {
super.par();
}
我得到错误
未捕获的SyntaxError:“ super”关键字在此意外
无论我们是在类定义中创建函数还是在function('class')的原型对象中创建函数,都应该是同一回事。 我在这里做错了什么?
“ super”只是ES2015中与类语法一起引入的一种语法糖。 它只能在扩展另一个类的“类”的函数(构造函数和方法)中使用。
class A {
constructor(){}
par(){ console.log('para') }
}
class B extends A {
constructor(){
super()
}
}
等效于:
function A(){}
A.prototype.par = function(){console.log('para')}
var B = (function(parent){
var _super = parent;
function B(){
_super.call(this); // calls parent's constructor
}
B.prototype = Object.create(_super.prototype); // Inherits parent's methods.
B.prototype.par = function(){ // override parent's par.
_super.prototype.par.call(this); // child still has access to parent's par method thanks to closure :)
console.log('child');
}
return B;
})(A);
var b = new B();
b.par()
您不能:
function(){
super // super is not defined...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.