使用相同的关键字直接调用方法或设置值

时间:2019-12-07 15:35:11

标签: 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;

2 个答案:

答案 0 :(得分:1)

从技术上讲,您可以做到这一点,但是要想重新获得价值,就必须走另一条路:

class Test {
  something=1;
  set stuff(x){
    this.something=x;
  }
  get stuff(){
    return function(x){this.something=x;};
  }
  get check(){
    return this.something;
  }
};

let a=new Test;
console.log(a.check);
a.stuff=2;
console.log(a.check);
a.stuff(3);
console.log(a.check);
console.log("---");
console.log("a.stuff: "+a.stuff);

因为这里

  • a.stuff=2;呼叫setter
  • a.stuff(3);实际上是gets a.stuff,然后使用()
  • 调用3

因此getter和setter都将字段设置在(something)后面,因此“真正”读取它需要其他名称(此处为check)。

答案 1 :(得分:0)

您的直觉是正确的。因为在类上只能有一个称为text的元素,所以它可以是一个函数或一个属性。您不能同时拥有这两种方式。如上所述,分配a.text = 2将覆盖a的{​​{1}}函数定义。

如果您不知道,可以通过创建text属性的方式来创建属性text

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