题目:

let a = ???
if (a == 1 && a == 2 && a == 3) {
  console.log('Congratulations!');
}

开始看到这道题,我也是蒙的,怀疑这有可能实现吗?...
查阅资料发现可以通过Object原型有一个valueOf()方法

valueOf() 方法返回指定对象的原始值。

语法:
object.valueOf()
返回值

返回值为该对象的原始值。


javascript中调用valueOf()返回指定对象的原始值,通常我们不需要去调用它。当遇到要预期到的原始值。
的时候,javascript会自己调用valueOf()方法。但是,我们可以通过重写valueOf方法,来达到我们的目的。

实现:

let a = {
  val: 0,
  valueOf() {
    return ++obj.val
  }
}

if (a == 1 && a == 2 && a == 3) {
  console.log('Congratulations!');
}

总结:
其实我们的最终目的就是,每次调用a的时候,有一个方法去拦截并重新返回一个新的值。而javascipt原生支持的就是valueOf()方法。


太_2_真_人
23 声望0 粉丝

已有之事将来必有,易行之事将来必行,太阳底下无新事。