如何在JavaScript的类名称中声明与属性同名的函数?

时间:2020-04-13 03:44:59

标签: javascript firebase class oop getter-setter

我在使用Google Firebase身份验证和Firebase Firestore时遇到了这一问题。您可以使用相同的名称访问变量及其类的函数,例如:

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

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

请注意他们如何同时使用firebase.authfirebase.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';
    }

}

我什至尝试研究setter和getter,因为它们也可以识别调用的是foo.bar还是foo.bar(),但是setter不接受返回的值。

我怎么做Firebase团队正在做的事情?他们是如何解决这个魔术的?

2 个答案:

答案 0 :(得分:1)

伙计,您必须注意,与类的Firebase样式等效的对象应如下所示,只是您做错了。

class foo {

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

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

}

但是。如果必须将“ .bar”设置为正常值,然后将.bar作为函数使用,则可以使用getter / setter。只是对我来说没有多大意义。

class foo {

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

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

    get bar() {
      return this.barFunc;
    }

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

}

答案 1 :(得分:0)

可以为功能分配其他属性。

function auth () {
 return ‘banana’
}

auth.Auth = ‘wookie’;

console.log(auth()); // banana
console.log(auth.Auth); // wookie 
相关问题