Javascript 使用同一关键字直接调用方法或设置值

Javascript 使用同一关键字直接调用方法或设置值,javascript,Javascript,我想创建一个类,在这个类中,我可以使用相同的关键字调用方法或在类中设置变量。我有点不认为这是可能的,但如果有一个办法,或任何周围的工作,请分享。下面是一个示例代码 class myClass { text(text) { this.innerText = text; } } let a = new myClass(); //I want this to work a.text(2); //I also want this to work a.text = 2; 你的直觉是

我想创建一个类,在这个类中,我可以使用相同的关键字调用方法或在类中设置变量。我有点不认为这是可能的,但如果有一个办法,或任何周围的工作,请分享。下面是一个示例代码

class myClass {
  text(text) {
    this.innerText = text;
  }
}

let a = new myClass();

//I want this to work
a.text(2);

//I also want this to work
a.text = 2;

你的直觉是正确的。因为类上只能有一个名为
text
的元素,所以它可以是函数或属性。你不能两全其美。如上所述分配
a.text=2
将覆盖
a
text
函数定义

如果您不知道,可以创建一个属性
text
,其设置方式与函数的设置方式相同:

class myClass {
  get text() { return this.innerText; }
  set text(val) { this.innerText = val; }
}

从技术上讲,你可以做到这一点,但要想收回价值,必须走另一条路:

类测试{
某物=1;
布景(x){
这个,某物=x;
}
拿东西{
返回函数(x){this.something=x;};
}
得到支票{
归还这个东西;
}
};
设a=新试验;
控制台日志(a.check);
a、 stuff=2;
控制台日志(a.check);
a、 材料(3);
控制台日志(a.check);
console.log(“--”);

console.log(“a.stuff:+a.stuff”)
在哪里声明了
innerText
?我确信可以同时让
a.text(2)
a.text=2
工作,但您肯定无法使用
a.text
读取值
2
,只有
a.text()
可以工作。但问题是你为什么要这么做?因为这将打破对对象将/应该如何工作的任何预期,因此会严重损害可维护性。
let a = new myClass();
a.text = 'test';
console.log(a.innerText) // -> 'test'