子类中父类的调用方法

时间:2019-09-12 13:25:54

标签: javascript es6-class

我最近开始在Classes中学习javascript,在阅读一些非常有趣的内容时,我想到了尝试自己的一些想法。

如果您有Parent的父类,其中methodlogSomething```` and a child class of类的, with which you do是子类扩展了Parent , how can you then execute the inherited method from the parent class, logSomething` ,在子班内?

如果您在Child类内部定义一个方法并将this.logSomething()添加到该方法,则无论何时调用子类中的方法,继承的logSomething函数实际上都会运行,但是除此之外,我还没有找到直接在该子类内部执行logSomething的任何方法。

我尝试过this.logSomething(),尝试过将其添加到对象,自执行(IIFE)函数以及我能做的所有事情,但是没有结果。

class Parent {
  constructor() {}

  logSomething() {
    console.log('I am logging something')
  }

}

class Child extends Paren {
  logSomething() // This does not work
}

当前这样做是行不通的,如果它抛出一个错误,指出您试图定义一个函数的事实。

如果我不误会React使用与life-cycle methods类似的东西,我知道应该以某种方式实现,对吗?如componentWillMount

人们将如何做呢?

3 个答案:

答案 0 :(得分:5)

第一个错误是您要扩展Paren而不是Parent
同样,您不能只在类内部抛出随机语句。它必须在函数内部。
如果您希望它在每次创建该类的实例时运行,则它应该在constructor内或由它调用的函数内。 (请注意,您需要在构造函数的开头调用super()
最后,您仍然需要使用this.logSomethingthis.logSomething

class Parent {
  constructor() {}

  logSomething() {
    console.log('I am logging something');
  }

}

class Child extends Parent {
  constructor() {
    super();
    this.logSomething(); // Will use Parent#logSomething since Child doesn't contain logSomething
    super.logSomething(); // Will use Parent#logSomething
  }
}

new Child();

class Parent {
  constructor() {}

  logSomething() {
    console.log('Parent Logging Called');
  }

}

class Child extends Parent {
  constructor() {
    super();
    this.logSomething(); // Will call Child#logSomething
    super.logSomething(); // Will call Parent#logSomething
  }

  logSomething() {
    console.log('Child Logging Called');
  }
}

new Child();

您也可以这样做:

class Parent {
  constructor() {}

  logSomething() {
    console.log('Parent Logging Called');
  }

}

class Child extends Parent {
  logSomething() {
    console.log('Child Logging Called and ...');
    // Careful not use this.logSomething, unless if you are planning on making a recursive function
    super.logSomething();
  }
}

new Child().logSomething();

只要新类对该属性没有自己的定义,就可以使用this调用任何函数或使用父类的任何属性。

答案 1 :(得分:2)

查看here了解更多信息。

class Parent {
  constructor() {}

  logSomething() {
    console.log('I am logging something')
  }

}

class Child extends Parent {
  logSomething() {
    super.logSomething(); // Call parent function
  }

}

答案 2 :(得分:1)

a)您不能在那里调用函数,可以在类中声明的函数中调用函数

b)您需要使用this.logSomething()

示例:

tel

查看在子类中何时class Parent { constructor() {} logSomething() { console.log('I am logging something') } } class Child extends Parent { fn() { this.logSomething() // This does work } } new Child().fn()被称为fn的其他答案-那么您需要logSomething来调用“父” logSomething而不是子logSomething