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

发布于 2022-09-11 23:02:55 字数 478 浏览 25 评论 0

这是在看阮一峰老师的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();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

带刺的爱情 2022-09-18 23:02:55

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

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

  function B() {
    A.call(this);
  }
  var b = new B();
梦归所梦 2022-09-18 23:02:55

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

┼── 2022-09-18 23:02:55

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文