вызвать функцию из того же класса nodejs - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь вызвать функцию из того же класса, но она всегда возвращает ошибку TypeError: this.c is not a function Я пробовал также module.exports.c() и тот же результат

module.exports = (options)=>{
    return{
        a:(a)=>{
           console.log(a);
        },
        b:(b)=>{
          this.c('c');
          console.log(b)
        },
        c:(c)=>{
           console.log(c);
        }
    }
}

После обновления

module.exports =  ({})=>{
    return{
        genereate:function(identifier){
            console.log('genereate')
        },
        middleware:function(req,res,next){
            this.c();
            console.log('genereate')
        },
        c:function(){
            console.log('geeet');
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

Функции стрелок связывать this лексически (что означает, что оно не связывает свои собственные this).
Вместо этого используйте нормальные функциональные выражения:

module.exports = (options) => {
    return {
        a: function(a){
            console.log(a);
        },
        b: function(b){
            this.c('c');
            console.log(b)
        },
        c: function(c){
            console.log(c);
        }
    };
};

Пример в браузере:

let f = (options) => {
    return {
        a: function(a){
            console.log(a);
        },
        b: function(b){
            this.c('c');
            console.log(b)
        },
        c: function(c){
            console.log(c);
        }
    };
};

f().a("a");
f().b("b");
f().c("c");
0 голосов
/ 13 апреля 2019

Вы можете попробовать и экспортировать class, просто передайте options на ваш constructor

class InnerCall {
  constructor(options) {
    this.options = options;
  }

  a(a) {
    console.log(a);
  }

  b(b) {
    this.c('c');
    console.log(b);
  }

  c(c) {
    console.log(c);
  }
}

const example = new InnerCall({ option: 'Im an option' });

example.b('check this out');
console.log(example.options.option);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...