感觉class的super用作对象还是有点绕,请教大佬给一个透彻的解释

这是在看阮一峰老师的es6中关于类遇到的问题。代码如下,虽然答大体意思我知道,不过不是太能理解super.x输出为undefined。

class A {
  constructor() {
    this.x = 1;
  }
}
class B extends A {
  constructor() {
    super();
    this.x = 2;
    super.x = 3;  //super.x.call(this),即为this.x。但属性没有call方法
    
    //super.x即为A.prototype.x,A中的x为实例的属性,而实例的属性和方法都无法在原型上访问到(能懂)
    console.log(super.x); // undefined  为什么这里读到的一定是A.prototype.x,而不会是this.x???
    console.log(this.x); // 3
  }
}
let b = new B();
阅读 2k
3 个回答

翻翻红宝书就知道了
就是 call , apply 的应用罢了

  function A() {
    this.tag = 'A';
  }

  function B() {
    A.call(this);
  }
  var b = new B();
新手上路,请多包涵

super.x = 3 这个是数据负值,内部调用了setter方法,此时this是子类的实例,相当于给B的实例的x属性赋值了。而supper.x 这是取值,实际上是取 A.prototype.x 的值,所以返回undefined。不知道这样理解是否核合适

感觉目前还是水平欠缺。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题