ES6 super()在构造函数中实际做了什么?

Ser*_*aev 6 javascript constructor class super ecmascript-6

!Hola,amigos.我有这个小类继承结构

class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
    toString() {
        return '(' + this.x + ', ' + this.y + ')';
    }
}

class ColorPoint extends Point {
    constructor(x, y, color) {
        super(x, y); 
        this.color = color;
    }
    toString() {
        return super.toString() + ' in ' + this.color; 
    }
}

let newObj = new ColorPoint(25, 8, 'green');
Run Code Online (Sandbox Code Playgroud)

它汇编到这个jsfiddle

我以愚蠢的方式了解它在es6中是如何工作的.但是有人可以解释它在es5中如何工作.以更简单的形式.

Ber*_*rgi 12

super(…);基本上是糖this = new ParentConstructor(…);.ParentConstructor扩展类在哪里,并且this =this关键字的初始化(好吧,鉴于这是禁止的语法,它有点多于糖).实际上它将从正确new.target.prototype而不是ParentConstructor.prototype像它那样继承new.所以不,它在引擎盖下如何工作根本不能与ES5相比,这实际上是ES6类中的一个新功能(最终使我们能够正确地对内置类进行子类化).

  • `function SubClass() { return SuperClass.call(this) }` 这不会正确设置原型并且仍然保留在 ES5 的构造中吗? (2认同)