Как объявить функцию с тем же именем, что и у свойства в имени класса в javascript? - PullRequest
1 голос
/ 13 апреля 2020

Я сталкивался с этим при работе с Google Firebase Authentication и Firebase Firestore. Вы можете получить доступ к переменной и функции их классов с тем же именем, например:

//To authenticate:
firebase.auth().signInWithEmailAndPassword()

//Or to access a value
firebase.auth.Auth.Persistence.SESSION

Обратите внимание, как они могут использовать firebase.auth и firebase.auth(). Когда я пытаюсь выяснить, могу ли я это сделать, выдается ошибка:

class foo {

    public bar;

    constructor() {
        this.bar = 'Bar!'; //Expecting 'Bar!' when run foo.bar()
    }

    //However, it throws an error here, as bar was already defined
    bar() {
        return 'Function bar() was called';
    }

}

Я даже пытался заглянуть в сеттер и геттер, поскольку они также могут распознать, получил ли foo.bar или foo.bar() вызван, но установщик не принимает возвращенное значение.

Как я могу сделать то, что делает команда Firebase? Как они справились с этой магией c?

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Человек, которого вы должны заметить, эквивалентен стилю Firebase вашего класса, должен быть похож на следующий, вы просто ошиблись.

class foo {

    constructor() {
        this.bar.bar = 'Bar!';
        // instead of this.bar = 'Bar!';
    }

    bar() {
        return 'Function bar() was called';
    }

}

Однако. Если вы должны установить «.bar» как нормальное значение, а затем вернуть .bar как функцию, вы можете go с помощью getter / setter. Просто это не имеет особого смысла для меня.

class foo {

    constructor() {
        this.bar = 'Bar!';
    }

    barFunc() {
      'Function bar() was called';
    }

    get bar() {
      return this.barFunc;
    }

    set bar(value) {
      this.barValue = value;
    }

}
0 голосов
/ 13 апреля 2020

Функции могут быть назначены дополнительные свойства.

function auth () {
 return ‘banana’
}

auth.Auth = ‘wookie’;

console.log(auth()); // banana
console.log(auth.Auth); // wookie 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...