如何在 javascript 中声明与 class 名称中的 属性 同名的函数?
How to declare a function with the same name as a property in class name in javascript?
我在使用 Google Firebase 身份验证和 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';
}
}
我什至尝试查看 setter 和 getter,因为它们也可以识别调用的是 foo.bar
还是 foo.bar()
,但是 setter不接受返回值。
我如何做 Firebase 团队正在做的事情?他们是如何变出这种魔法的?
可以为函数分配额外的属性。
function auth () {
return ‘banana’
}
auth.Auth = ‘wookie’;
console.log(auth()); // banana
console.log(auth.Auth); // wookie
伙计,你必须注意你的 class 的 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;
}
}
我在使用 Google Firebase 身份验证和 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';
}
}
我什至尝试查看 setter 和 getter,因为它们也可以识别调用的是 foo.bar
还是 foo.bar()
,但是 setter不接受返回值。
我如何做 Firebase 团队正在做的事情?他们是如何变出这种魔法的?
可以为函数分配额外的属性。
function auth () {
return ‘banana’
}
auth.Auth = ‘wookie’;
console.log(auth()); // banana
console.log(auth.Auth); // wookie
伙计,你必须注意你的 class 的 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;
}
}