javascript - 无法将 'super' 与 JavaScript 类中原型(prototype)对象上定义的函数一起使用

标签 javascript class inheritance super

我有类A,它是类B的父类

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

我收到错误

Uncaught SyntaxError: 'super' keyword unexpected here

无论我们在类定义中创建函数还是在函数('class')的原型(prototype)对象中创建函数,它都应该是相同的。 我在这里做错了什么?

最佳答案

'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...
}

关于javascript - 无法将 'super' 与 JavaScript 类中原型(prototype)对象上定义的函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55351075/

相关文章:

javascript - JavaScript 中的原型(prototype)继承...我可以调用 "super"等价物吗?

python - 简单的Python继承

javascript - 用于三个应用程序的简单服务器端 html/JS 路由器

javascript - 如何知道异步函数何时完成

javascript - 为什么点击这个按钮时会出现一个随机空格?

Python装饰器类: How to correctly count function calls in a with block

java - JSF 2 : Is it possible to inherit @ManagedBean?

javascript - 错误 : Cannot find module "rxjs/operators" in Ionic Angular

visual-studio - 在 Visual Studio 2010 中打开 "Class Explorer"

python - 在 Tkinter 中使用文件配置多个页面