繁体   English   中英

无法对JavaScript类中的原型对象定义的函数使用'super'

[英]Not able to use 'super' with function defined on protoype object in JavaScript class

我有A班,是BA父母

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM