我有类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/