Вызовите класс дочернего метода в parent с родительским экземпляром - PullRequest
0 голосов
/ 03 марта 2019

Я не хочу, чтобы мой родительский класс был слишком длинным, поэтому я отделяю некоторые методы от него и создаю дочерний класс.

Однако я не хочу использовать дочерний класс в качестве экземпляра. Я хочу, чтобы он использовался только родительским классом.

class Parent {
  parentMethod() {
    this.foo(); // execute from parent
  }
}

class Child extends Parent {
  foo() {
    console.log('foo!');
  }
}

const parent = new Parent();
parent.parentMethod(); // execute parent method which execute child method

эта причина:

Uncaught TypeError: this.foo не является функцией

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Я не хочу, чтобы мой родительский класс был слишком длинным, поэтому я отделяю некоторые методы от него

Хорошо.

Поэтому я создаю дочерний классОднако я не хочу использовать дочерний класс в качестве экземпляра.

Нет, использование подклассов - неправильный подход.Особенно, если вы не хотите создавать экземпляр подкласса, это даже не решение вашей проблемы.

Чтобы разделить блоки кода, разделите их на отдельные функции.Они не должны быть связаны с вызывающей стороной посредством наследования и вообще не должны быть методами класса.Просто напишите

class MyClass {
  myMethod() {
    foo();
  }
}

function foo() {
  console.log('foo!');
}

const instance = new MyClass();
instance.myMethod();

Или составьте свой объект из нескольких более мелких помощников:

class Outer {
  constructor() {
    this.helper = new Inner();
  }
  myMethod() {
    this.helper.foo();
  }
}

class Inner {
  foo() {
    console.log('foo!');
  }
}

const instance = new Outer();
instance.myMethod();
0 голосов
/ 03 марта 2019

Если вы хотите использовать класс Parent в подклассе, класс Child, то вам нужно сделать следующее:

class Parent {
    foo() {
        console.log('foo!');
    }
}


class Child extends Parent {
    constructor() {
        super();
    }
}

let c = new Child(); //instantiate Child class
c.foo(); // here you are calling super.foo(); which is the Parent classes method for foo.
//foo!

Ключевое слово super используется для доступа ивызовите функции для родительского объекта.

Как использовать super

Или, в качестве альтернативы, если вы предпочитаете создать метод в дочернем классе, который переноситродительский метод foo, а не доступ к нему путем создания экземпляра родительского класса посредством вызова super в дочернем конструкторе:

class Parent {
    foo() {
        console.log('foo!');
    }
}


class Child extends Parent {
    method() {
        this.foo();
    }
}

let c = new Child();
c.method();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...