Вызов частного метода из статического метода ES6 - PullRequest
0 голосов
/ 23 октября 2018

Я не могу вызвать частный или нестатический метод из статического метода в классе, ниже приведен пример

class a {
 fun1(){
  console.log('fun1');
 }
 static staticfun(){
  console.log('staticfun');
  this.fun1();
 }
}

a.staticfun();

Я пытаюсь выставить только метод staticfun, который внутренне вызывает все частные методы, но это даетЯ this.fun1 не является функцией.Я пытался найти много способов найти его с помощью «this», но он работает.

Как я могу вызывать закрытые методы экземпляра внутри статических методов?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

fun1 не является статической функцией, поэтому вам нужно определить новый экземпляр класса a для его вызова:

class a {
  fun1() {
    console.log('fun1');
  }

  static staticfun() {
    console.log('staticfun');
    
    new this().fun1();
  }
}

a.staticfun();

Вы должны заметить, что это не очень хорошая практика.У вас не должно быть статического метода, основанного на нестатической логике.

Обходной путь может состоять в том, чтобы передать экземпляр a статической функции, но это полностью игнорирует необходимость использования статического метода впервое место.

0 голосов
/ 23 октября 2018

Другой способ - вызвать функцию непосредственно из прототипа класса (что означает буквально свойство prototype, а не __proto__), если вы хотите избежать его создания.

class a {
 fun1(){
  console.log('fun1');
 }
 static staticfun(){
  console.log('staticfun');
  this.prototype.fun1();
 }
}

a.staticfun();
0 голосов
/ 23 октября 2018

Сначала прочитайте этот SO вопрос

Возможно, вы можете создать экземпляр класса a и затем вызвать из экземпляра метод fun1.

Хотя нет смысла вызывать нестатический метод из статического.

static означает, что этот метод принадлежит объекту (а не экземпляру)

class a {
 fun1(){
  console.log('fun1');
 }
 static staticfun(){
  console.log('staticfun');
  const classInstance = new a()
  classInstance.fun1();
 }
}

a.staticfun();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...